关注[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字段上。
是。首先。所以我的问题是:如果我想映射第二个字段怎么办?
实际上,第二字段的类型不能像Int
,Char
,Float
等简单;它必须是一种可以作为应用于concreate类型的类型构造函数获得的类型(斜体文本与“ parameter type”相同,对吗?),例如Just 3
,Right "hello"
,"hello"
,[1..10]
等;因此,在第二字段上的映射和在[[第二字段的内容上的映射似乎不同。
mymap :: (t1 k1 -> t2 k2) -> Barry t1 k1 p -> Barry t2 k2 p
mymap f (Barry x y) = Barry x (f y)
[您可能可以通过Product
或Compose
这样的包装器类型将足够多的转换链接在一起,以获得Bifunctor
或弹出的内容,但在这种情况下,我认为这样做不值得。