Haskell:定义 Writer Functor

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

给定任何类别 C 与产品和 C 中的对象 c,我们可以定义一个函子 _ × c : C -> C 它将对象 a 映射到 a × c 和态射 f : a -> bf × 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 个参数,但没有给出任何参数。”

haskell functor
1个回答
0
投票

您使用类型同义词,对于二元组,这已经定义好了。

您可以定义一个新类型并为此创建一个

Functor
实例:

data Writer a = Writer a String

instance Functor Writer where    
  fmap f (Writer x s) = Writer (f x) s
© www.soinside.com 2019 - 2024. All rights reserved.