
Hi All, Sorry if this is a very lame question but i am a beginner and much appreciate if some one could correct me? I am reading haskell book and curious why the return type of the bind operator look odd to me For the given definitions * type Parser a = String -> [(a, String)]* * item :: Parser Char* * item = \inp -> case inp of * * [] -> []* * (x:xs) -> [(x,xs)]* * bind :: Parser a -> (a -> Parser b) -> Parser b* * p `bind` f = \inp -> concat [ f x inp' | (x, inp') <- p inp]* when I define z in GHCI as * let z = item `bind` (\x -> (\y -> result (x,y))) "Rohit"* the return type is * >> :t z* * z :: Parser ([Char], Char)* Question: (1) Shouldn't the return type of (Char, [Char])? looking at the list comprehension, "(x, inp') <- p inp" should yield -> "('r', "ohit")". Next f x inp' is left associative, so f x should yield character 'r' and pass to the lambda that should return result tuple ('r', "ohit"), but why is it that z type is ([Char], char) :: (x,y) (2) How can i print the value of z in the above case on the ghci Many thanks, Rohit