
I am sorry, I must have hit the wrong hotkey. My code looks like this: type Parser a = String -> [(a, String)] result :: a -> Parser a result v = \inp -> [(v, inp)] zero :: Parser a zero = \inp -> [] item :: Parser Char item = \inp -> case inp of [] -> [] (x:xs) -> [(x, xs)] parse :: Parser a -> String -> [(a, String)] parse p inp = p inp (>>=) :: Parser a -> (a -> Parser b) -> Parser b (>>=) p f = \inp -> concat [f v inp' | (v, inp') <- p inp] sat :: (Char -> Bool) -> Parser Char sat p = do x <- item if p x then result x else zero I beleive I understand how this code is meant to work, but when I run it in ghci I get the follwing error-message: parser.hs:21:13: No instance for (Monad ((->) String)) arising from a do statement Possible fix: add an instance declaration for (Monad ((->) String)) In a stmt of a 'do' block: x <- item In the expression: do { x <- item; if p x then result x else zero } In an equation for `sat': sat p = do { x <- item; if p x then result x else zero } parser.hs:22:18: Couldn't match expected type `Char' with actual type `[(Char, String)]' In the first argument of `p', namely `x' In the expression: p x In a stmt of a 'do' block: if p x then result x else zero Failed, modules loaded: none. Sadly I have no idea how to fix this :( Thanks again :)