
Sorry. The same error, This is new stuff.
-----------------------------------------------------------------------------------
newtype Parser a = P { parse :: (String -> [(a,String)]) }
instance Monad Parser where
return v = P (\s -> [(v,s)])
p >>= f = P (\s -> case parse p s of
[] -> []
[(v,str)] -> parse (f v) str)
fail _ = P (\_ -> [])
item :: Parser Char
item = \inp -> case inp of
[] -> []
(x:xs) -> [(x,xs)]
p :: Parser (Char,Char)
p = do { x <- item
; item
; y <- item
; return (x,y) }
-----------------------------------------------------------------------------------
I got following:
Prelude> :load c:\b.hs
[1 of 1] Compiling Main ( C:\b.hs, interpreted )
C:\b.hs:13:7:
The lambda expression `\ inp -> ...' has one argument,
but its type `Parser Char' has none
In the expression:
\ inp
-> case inp of {
[] -> []
(x : xs) -> [...] }
In the definition of `item':
item = \ inp
-> case inp of {
[] -> []
(x : xs) -> ... }
Failed, modules loaded: none.
2010/3/19 Stephen Tetley
On 19 March 2010 04:35, 国平张
wrote: Sorry to bother again. I just cannot figure out how it could compile. I got compile errors. Can someone point out what is right code to use a do notion to make a Parser works.
It looks like the p parser may have the wrong indentation - although this might be due to either your mail client or my client formatting wrongly:
p :: Parser (Char,Char) p = do x <- item item y <- item return (x,y)
Try - with white space all aligned to the start character /x/ of the first statement in the do:
p :: Parser (Char,Char) p = do x <- item item y <- item return (x,y)
Or with braces and semis:
p :: Parser (Char,Char) p = do { x <- item ; item ; y <- item ; return (x,y) }
Best wishes
Stephen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe