gpt4 book ai didi

haskell - 使数据类型成为 Functor 的实例以映射到参数类型的字段

转载 作者:行者123 更新时间:2023-12-02 19:31:23 25 4
gpt4 key购买 nike

跟进this question关于为了伟大的利益而学习 Haskell

作者,Chapter 8结尾声明此数据类型(稍微简化,我希望它没问题)

data Barry t k p = BarryV p (t k) deriving (Show)

然后使其成为Functor的实例

instance Functor (Barry a b) where
fmap f (BarryV x y) = BarryV (f x) y

然后总结

There we go! We just mapped the f over the first field.

是的。首先。所以我的问题是:如果我想映射第二个字段怎么办?

实际上第二个字​​段不能是IntCharFloat等简单类型;它必须是可以作为应用于具体类型的类型构造函数来获取的类型(斜体文本与“参数类型”相同,对吧?否,它是参数化类型),例如Just 3Right "hello""hello"[1..10],依此类推;因此,映射到第二个字段和映射第二个字段的内容似乎不同。

我真的很困惑,但我想我所表现出的最后一段已经足够了。

最佳答案

最简单的方法是使用您的类型创建一个函数作为执行此操作的具体类型:

mymap :: (t1 k1 -> t2 k2) -> Barry t1 k1 p -> Barry t2 k2 p
mymap f (BarryV x y) = BarryV x (f y)

如果您确实想使用现有类型类来完成此操作,您可能可以通过 ProductCompose 等包装类型将足够的转换链接在一起,以获得类似 Bifunctor 弹出,但我认为在这种情况下不值得这样做。

关于haskell - 使数据类型成为 Functor 的实例以映射到参数类型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61738702/

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