【发布时间】:2016-10-10 17:25:16
【问题描述】:
我正在努力完成Haskell Book 的练习(第 16 章。函子)。鉴于以下情况,它希望我定义fmap:
{-# LANGUAGE FlexibleInstances #-}
newtype Flip f a b =
Flip (f b a)
deriving (Eq, Show)
newtype K a b =
K a
instance Functor (Flip K a) where
fmap = undefined
在之前的练习中,我已经完成了以下操作:
data K a b =
K a
instance Functor (K a) where
fmap f (K x) = K x
但是对于这个Flip a b,我什至无法理解如何开始,例如如何继续fmap f Flip ...。
我想也许在这样做之前我还应该为新类型 K a b 编写一个仿函数,类似于我所做的 data K a b:
instance Functor (K a) where
fmap f (K x) = K x
但我不明白如何继续使用 Flip f a b 的 Functor 实例。
任何想法,提示?
【问题讨论】:
-
最后我想出了一些类型检查的东西:
instance Functor (Flip K a) where fmap f (Flip (K x)) = Flip (K (f x))。但现在我无法向自己解释(甚至不知道它是否正确)。