Monoid如何使用mempty

时间:2017-06-26 09:02:46

标签: haskell

我有以下数据类型,它在Monoid类型类:

中实现
data Optinal a = 
    Nada
  | Only a
  deriving (Eq, Show)

instance Monoid a => Monoid (Optinal a) where
  mempty = Nada
  mappend Nada (Only a) = Only a
  mappend (Only a) Nada = Only a
  mappend Nada Nada = Nada
  mappend (Only a) (Only b) = Only (mappend a b)  

我的问题是,如何使用mempty功能?

1 个答案:

答案 0 :(得分:5)

mempty中的Monoid定义了“unit”元素。可能使用它的一个特殊情况是,如果我们有一个聚合Monoid列表的函数:

aggregate :: (Monoid a) => [a] -> a
aggregate [] = mempty
aggregate (x:xs) = x `mappend` aggregate xs

请记住,Monoid是对常见计算形式的抽象。当您为Monoid s编写常规函数时,mempty可能会出现这些函数。