申请人的纯数据是什么?a b = 2 a b

时间:2016-04-13 20:10:58

标签: haskell

鉴于此类型:

data Two a b = Two a b deriving (Eq, Show)

适用的定义是什么?如果没有在pure添加约束,我就无法获得a权限,例如Num a

instance (Num a, Monoid a) => Applicative (Two a) where
  pure b = Two 1 b
  Two f f' <*> Two a b = Two a (f' b)

1 个答案:

答案 0 :(得分:3)

如果没有约束,你就无法拥有它。您需要对a执行某些操作,并且能够对该类型执行操作,您可以通过两种方式获取操作:使用特定类型(例如Int或抽象类型) ,需要一个类型类实例)。

在这种情况下,最常见的约束是Monoid,它使您的实例与2元素元组相同:

instance Monoid a => Applicative ((,) a) where
    pure x = (mempty, x)
    (u, f) <*> (v, x) = (u `mappend` v, f x)