
well,i am reading the book :<Programming in haskell > chapter 8 functional parsers this chapter try teaching an parser technology,but i have some problem about do keyword --some brief info of types : type Parser a = String -> [(a,String)] item :: Parser Char --item "abc" = [('a',"bc")] return' :: a -> Parser a --return' 'a' "foo" = [('a',"foo")] --below code complier notice... sorry format p2 :: Parser (Char,Char) p2 = do x <- item item y <- item return' (x,y) "No instance for (Monad ((-)) String)) arising from a execute statement Possible fix : add an instance declaration for (Monad ((-)) String)) In a stmt of a 'do' expression : y <- item In the expression: do { x <- item; item; y <- item; return' (x,y)} In an equation for 'p2': p2 = do { x <- item; item; y <- item; ....}" thanks for any help jiangzhen mail:jiangzhen3s@qq.com