gpt4 book ai didi

带括号的 Haskell 新类型

转载 作者:行者123 更新时间:2023-12-03 20:09:43 24 4
gpt4 key购买 nike

我试图理解 Monads made difficult 中的解释我很难弄清楚以下新类型定义:

newtype (FComp g f) x = FComp { unCompose :: g (f x) }

instance (Functor b c f, Functor a b g) => Functor a c (FComp g f) where
fmap f (FComp xs) = FComp $ fmap (fmap f) xs

我没有看到用括号中的表达式代替类型声明来解释 newtype 的含义。因此,我无法弄清楚 fmap 函数的定义是什么意思。我也不明白为什么定义了 unCompose 字段访问器但从未使用过。我觉得我缺少一些新类型的基本语义。

最佳答案

一个小测试:

newtype (FComp g f) x = FComp { unCompose :: g (f x) }
newtype FComp2 g f x = FComp2 { unCompose2 :: g (f x) }

*Main> :i FComp
newtype FComp g f x = FComp {unCompose :: g (f x)}
-- Defined at Test.hs:34:10
*Main> :i FComp2
newtype FComp2 g f x = FComp2 {unCompose2 :: g (f x)}
-- Defined at Test.hs:35:9

所以括号真的不会改变任何东西。就像没有他们一样。

至于 uncompose ,它只是解开 newtype 的名称没有使数据构造函数显式。在您发布的片段中,他们使用模式匹配,但不想导出实现细节,所以 unCompose提供使用 FComp的内容.这与 data 中的相同。定义,只有 newtype只需要一个字段而不是 0..n。

关于带括号的 Haskell 新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17853232/

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