给定任何类别 C 与产品和 C 中的对象 c,我们可以定义一个函子 _ × c : C -> C 它将对象 a 映射到 a × c 和态射 f : a -> b 到 f × idc : a × c -> b × c.
我想在 Haskell 中实现这样一个仿函数。我希望 c 是
String
,这样函子就可以传递日志。
我试过以下方法:
type Writer a = (a,String)
instance Functor Writer where
fmap :: (a -> b) -> Writer a -> Writer b.
fmap f (x,s) = (f x, s)
但是,我收到一条错误消息:“类型同义词‘Writer’应该有 1 个参数,但没有给出任何参数。”
您使用类型同义词,对于二元组,这已经定义好了。
您可以定义一个新类型并为此创建一个
Functor
实例:
data Writer a = Writer a String
instance Functor Writer where
fmap f (Writer x s) = Writer (f x) s