gpt4 book ai didi

haskell - 使用遍历实现 sequenceA

转载 作者:行者123 更新时间:2023-12-05 00:51:20 25 4
gpt4 key购买 nike

sequenceA 在 Data.Traversable 中实现如下

 sequenceA :: Applicative f => t (f a) -> f (t a)
sequenceA = traverse id

我无法理解 traverse id 的类型. traverse有类型: traverse :: Applicative f => (a -> f b) -> t a -> f (t b)它的第一个参数的类型是: (a -> f b)但在 sequenceA 的情况下, id 函数的类型为 (a -> a) . f在哪里?

最佳答案

先说id有类型 id :: c -> c使事情不那么复杂。 a在函数的类型签名中是局部的,因为 aid :: a -> aa无关在 traverse :: Applicative f => (a -> f b) -> t a -> f (t b) . a只是一个类型参数。

所以现在我们有了表达式:

traverse id

和:
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
id :: c -> c

我写了 c -> c部分在 a -> f b 的同一列部分展示 Haskell 类型系统如何交互。现在得出:
a   ~ c
f b ~ c

所以这意味着 a ~ c ~ f b并且由于类型相等,就像每个相等关系都是可传递的,因此也意味着 a ~ f b .所以现在 Haskell 专门 traverse id进入:
traverse id :: Applicative f => t a -> f (t b)
traverse id :: Applicative f => t (f b) -> f (t b) -- a ~ f b

因此,类型。 id输入 traverse id有类型 id :: f b -> f b .

关于haskell - 使用遍历实现 sequenceA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473663/

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