假设我有一个适用的数据类型A
。 (为了举例,我们可以假设A
是Identity
)。适用于从同一个域到应用的功能的实例
我现在已经从一个A
到另一个对应于“转型”新的数据类型:
data B a b = B (A a -> A b)
我要定义的琐碎应用型实例(B a)
产生这既适用参数的新变革的<*>
其输入,然后使用的< *>从A的应用型实例
制定,这是很简单的定义:
instance Applicative (B a) where
pure x = B $ const $ pure x
(B ftrans) <*> (B xtrans) = B fxtrans
where fxtrans inp = let fout = ftrans inp
xout = xtrans inp
in fout <*> xout
但是,我有这样的感觉,应该有一个简单的点写法,使用这个事实(-> a)
是一个应用Functor。
由于我有什么想法,我考虑相应的函子实例的定义样本:
instance Functor (B a) where
fmap f (B xtrans) = B $ (fmap f) <$> xtrans
是否有类似简单的方式来定义应用型实例?
说这个问题中的'B a b'是否等于'type B a = Compose(( - >)(A a))A'是否正确? – 2014-10-31 23:04:32
@ChristianConkle:是的。 – 2014-10-31 23:43:55