[Haskell-beginners] Bind parser returning wrong return type
Rohit Sharma
rohits79 at gmail.com
Sat Nov 15 12:10:55 UTC 2014
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20141115/e800c2b9/attachment.html>
More information about the Beginners
mailing list