【发布时间】:2016-02-11 18:40:32
【问题描述】:
据我了解,代码
l = [(a,b)|a<-[1,2],b<-[3,4]]
等价于
l = do
a <- [1,2]
b <- [3,4]
return (a,b)
或
[1,2] >>= (\a -> [3,4] >>= (\b -> return (a,b)))
这种表达式的类型是 [(t,t1)] 其中 t 和 t1 在 Num 中。
如果我写类似
getLine >>= (\a -> getLine >>= (\b -> return (a,b)))
解释器读取两行并返回一个包含它们的元组。
但是我可以在列表生成器中使用 getLine 或类似的东西吗?
表达式
[x|x<-getLine]
返回错误“无法匹配预期类型[t0]' with actual typeIO String'”
但是,当然,这适用于 do-notation 或使用 (>>=)。
列表生成器有什么意义,它们与 do-notation 之间的实际区别是什么?
使用 list gens 时有任何类型限制吗?
【问题讨论】:
标签: haskell