小编cyc*_*pic的帖子

< - 隐式强制Haskell do块中的类型?

我的问题与另一个问题的答案有关:https://stackoverflow.com/a/11766789/3212958

在他的回答中,ertes写下了以下类型的签名

select :: [a] -> [(a, [a])]
Run Code Online (Sandbox Code Playgroud)

但是,当select实际使用时,ertes会在do块内写入以下内容

(y, ys) <- select xs
Run Code Online (Sandbox Code Playgroud)

请帮助我阐明元组如何(y, ys)匹配select的返回类型,即[(a, [a])].Haskell在某些时候强迫这些类型吗?(Haskell是否强制类型?)从返回的列表monad中<-提取类型的元组?(a, [a])select

谢谢,马克斯

---编辑:---

@Lee在尝试推理类型之前提醒newbs去desugar.在>>=明确表示之后,更清楚的是发生了什么.脱毒后,有问题的功能如下:

select xs >>= \(y, ys) -> fmap (y:) (perms (n - 1) ys)
Run Code Online (Sandbox Code Playgroud)

而对于名单,xs >>= f = concat (map f xs).因此,(y, ys)在此上下文中更好的阅读是作为映射列表的函数的签名.

monads haskell types

6
推荐指数
1
解决办法
196
查看次数

标签 统计

haskell ×1

monads ×1

types ×1