type Parser a = String -> [(a, String)]
文字列を受け取ると、それをパースした型aの結果と、消費されなかった文字列のペアのリストを返す、という型になっている。返り値のリストが空であることが失敗を表す。
					
  | 
					
  | 
					
  | ||||||||||||
			
  | 
| > | parse (return 1) "abc" | 
| [(1, "abc")] | |
| > | parse failure "abc" | 
| [] | |
| > | parse item "abc" | 
| [('a', "bc")] | 
			
  | ||||||||||||
| 
			p :: Parser (Char, Char) p = item >= \x -> item >= const item >= \y -> return (x, y)  | 
| > | parse p "abcdef" | 
| [(('a', 'c'), "def")] | |
| > | parse p "ab" | 
| [] | 
			
  | ||||||||||||
| > | parse (failure +++ return 'd') "abc" | 
| [('d', "abc")] | |
| > | parse (item +++ return 'd') "abc" | 
| [('a', "abc")] | 
					
  | |||||||||
| ・ | digit | :: Parser Char | 
| digit | = sat isDigit | 
| ・ | lower | :: Parser Char | 
| lower | = sat isLower | 
| ・ | upper | :: Parser Char | 
| upper | = sat isUpper | 
| ・ | alphanum | :: Parser Char | 
| alphanum | = sat isAlphaNum | 
| ・ | char | :: Char -> Parser Char | 
| char x | = sat (==x) | 
| > | parse digit "123" | 
| [('1', "23")] | |
| > | parse (char 'a') "abc" | 
| [('a', "abc")] | 
					
  | ||||||||||||||||||||
| > | parse (string "abc") "abcdef" | 
| [("abc", "def")] | |
| > | parse (string "abc") "ab1234" | 
| [] | 
					
  | ||||||||||||||||||||||||||||||
| > | parse (many digit) "123abc" | 
| [("123", "abc")] | |
| > | parse (many digit) "ab1234" | 
| [("", "ab1234")] | |
| > | parse (many1 digit) "ab1234" | 
| [] | 
					
  | ||||||||||||||||||||
| nat | :: | Parser Int | 
| space | :: | Parser () | 
			
  | |||||||||||||||||||||||||
| > | parse (token nat) " 123 " | 
| [(123, "")] | 
				
  | ||||||||||||||||||||||||||||||
				
  | |||||||||||||||||||||||||
| expr | := | term '+' expr | expr '-' term | term | 
| term | := | factor '*' term | term '/' factor | factor | 
| factor | := | '(' expr ')' | nat | 
| nat | := | '0' | '1' | '2' | ... | 
| expr | := | term '+' expr | expr '-' term | term | 
| term | := | power '*' term | term '/' power | power | 
| power | := | factor '^' power | factor | 
| factor | := | '(' expr ')' | nat | 
| nat | := | '0' | '1' | '2' | ... | 
| expr | := | expr '-' factor | factor | 
| factor | := | '(' expr ')' | nat | 
| nat | := | '0' | '1' | '2' | ... | 
						
  | |||||||||||||||||||||||||||||
						
  | |||||||||||||||||||||||||||||||||||
						
  | |||||||||||||||||||||||||||||
						
  | |||||||||||||||||||||||||||||||||||