gpt4 book ai didi

haskell - <- 是否隐式强制 Haskell do block 中的类型?

转载 作者:行者123 更新时间:2023-12-02 21:32:04 24 4
gpt4 key购买 nike

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

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

select :: [a] -> [(a, [a])]

但是,当 select实际使用时,ertes 在 do 里面写入以下内容 block

(y, ys) <- select xs

请帮我解释一下元组 (y, ys) 是如何工作的匹配select的返回类型,即[(a, [a])] 。 Haskell 是否在某个时刻强制类型? (Haskell 是否强制类型?)是 <-提取 (a, [a]) 类型的元组从列表 monad 中 select返回?

谢谢,最大

---编辑:---

@Lee 提醒新手在尝试推理类型之前先去糖。制作后>>=明确,更清楚发生了什么。脱糖后,相关函数如下所示:

select xs >>= \(y, ys) -> fmap (y:) (perms (n - 1) ys)

对于列表,xs >>= f = concat (map f xs) 。所以更好地阅读(y, ys)在此上下文中作为映射列表的函数的签名。

最佳答案

do表示法中,

do x1 <- action1
action2

被翻译成action1 >>=\x1 -> action2

这意味着如果 action1 对于某些 monad m 具有类型 m a,则 x1 具有类型 一个。它并不是真正的强制类型,而是从单子(monad)操作 action1 中“解压”值并将其绑定(bind)到 x1

关于haskell - <- 是否隐式强制 Haskell do block 中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com