我正在尝试实现一个Functor实例
data ComplicatedA a b
= Con1 a b
| Con2 [Maybe (a -> b)]
Run Code Online (Sandbox Code Playgroud)
对于Con2,我的思维过程是fmap必须类似于
fmap f (Con2 xs) = Con2 (map f' xs)
Run Code Online (Sandbox Code Playgroud)
那么我需要一个列表映射函数f'像
Maybe (a -> x) -> Maybe (a -> y)
Run Code Online (Sandbox Code Playgroud)
由于Maybe是函子,所以我可以像
fmap ((a->x) -> (a->y))
Run Code Online (Sandbox Code Playgroud)
为了得到((a->x) -> (a->y)),我想我可以做的
fmap (x->y)就是(fmap f)
所以我的事
instance Functor (ComplicatedA a) where
fmap f (Con1 x y) = Con1 x (f y)
fmap f (Con2 xs) = Con2 (map (fmap (fmap f)) xs)
Run Code Online (Sandbox Code Playgroud)
然而,真正的解决方案使用 …