使数据类型为Functor的实例,以映射到参数类型的字段上

问题描述 投票:0回答:1

关注[this question,关于了解Haskell,以求善良]。

作者,在Chapter 8的末尾声明了此数据类型(略微简化,希望很好)

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

然后使其成为Functor的实例

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

当时结论

我们去了!我们只是将f映射到first字段上。

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

实际上,第二字段的类型不能像IntCharFloat等简单;它必须是一种可以作为应用于concreate类型的类型构造函数获得的类型(斜体文本与“ parameter type”相同,对吗?),例如Just 3Right "hello""hello"[1..10]等;因此,在第二字段上的映射和在[[第二字段的内容上的映射似乎不同。

我真的很困惑,但我想最后一段足以说明我的努力。
haskell functional-programming functor
1个回答
0
投票
最简单的方法是只使用您的类型作为实现它的具体类型来创建函数:

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

[您可能可以通过ProductCompose这样的包装器类型将足够多的转换链接在一起,以获得Bifunctor或弹出的内容,但在这种情况下,我认为这样做不值得。
© www.soinside.com 2019 - 2024. All rights reserved.