【发布时间】:2014-11-15 12:08:29
【问题描述】:
我正在阅读 Haskell 书,很好奇为什么绑定运算符的返回类型对我来说很奇怪
对于给定的定义
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]
当我将 GHCI 中的 z 定义为
let z = item `bind` (\x -> (\y -> result (x,y))) "Rohit"
返回类型是
>> :t z
z :: Parser ([Char], Char)
问题: (1) (Char, [Char]) 的返回类型不应该吗?查看列表理解,“(x,inp')“('r',“ohit”)”。下一个 f x inp' 是左关联的,所以 f x 应该产生字符 'r' 并传递给应该返回结果元组 ('r', "ohit") 的 lambda,但是为什么 z 类型是 ([Char], char ) :: (x,y)
(2) 如何在 ghci 上打印上述情况下 z 的值
【问题讨论】:
标签: haskell