I am reading Chapter 8 of Programming Haskell by Graham Hutton and trying to run the code in the book.It seems that there are already defined library implementations of Parser so I used Parser' and generally ' on the end of each identifier to attempt to eliminate this problem.So the code I copied from the book is:type Parser' a = String -> [(a, String)]return' :: a -> Parser' areturn' v = \x -> [(v, x)]failure' :: Parser' afailure' = \inp -> []-- item doesn't seem to conflict with anything so no 'item :: Parser' Charitem = \inp -> case inp of[] -> [](x:xs) -> [(x,xs)]parse' :: Parser' a -> String -> [(a, String)]parse' p inp = p inpp :: Parser' (Char, Char)p = do x <- itemitemy <- itemreturn' (x,y)When run from WinGHCi I get error:prog_haskell.hs:458:9:Couldn't match type `[(Char, String)]' with `Char'Expected type: String -> [((Char, Char), String)]Actual type: Parser' ([(Char, String)], [(Char, String)])In the return type of a call of return'In a stmt of a 'do' block: return' (x, y)In the expression:do { x <- item;item;y <- item;return' (x, y) }458.9 is line at end with return' (x,y)Also in the chapter was the definition of >>= sequencing. as in:(>>=) :: Parser a -> (a -> Parser b) -> Parser bp >>= f = \inp -> case parse p inp of[] -> [][(v,out)] -> parse (f v) outBut I assumed this would already be in standard Haskell library and so I didn't need to define. But even when I did add, still get same error.How do I fix this?