相关疑难解决方法(0)

< - 隐式强制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
查看次数

Euler 43 - 是否有一个monad来帮助写这个列表理解?

这是一种解决欧拉问题43的方法(如果没有给出正确答案,请告诉我).是否有monad或其他合成糖可以帮助跟踪notElem条件?

toNum xs = foldl (\s d -> s*10+d) 0 xs

numTest xs m = (toNum xs) `mod` m == 0

pandigitals = [ [d0,d1,d2,d3,d4,d5,d6,d7,d8,d9] |
                d7 <- [0..9],
                d8 <- [0..9], d8 `notElem` [d7],
                d9 <- [0..9], d9 `notElem` [d8,d7],
                numTest [d7,d8,d9] 17,
                d5 <- [0,5],  d5 `notElem` [d9,d8,d7],
                d3 <- [0,2,4,6,8], d3 `notElem` [d5,d9,d8,d7],
                d6 <- [0..9], d6 `notElem` [d3,d5,d9,d8,d7],
                numTest [d6,d7,d8] 13,
                numTest [d5,d6,d7] 11,
                d4 <- [0..9], d4 `notElem` [d6,d3,d5,d9,d8,d7],
                numTest [d4,d5,d6] 7,
                d2 …
Run Code Online (Sandbox Code Playgroud)

monads haskell list-comprehension

5
推荐指数
1
解决办法
662
查看次数

标签 统计

haskell ×2

monads ×2

list-comprehension ×1

types ×1