我有以下数据类型,它在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
功能?
答案 0 :(得分:5)
mempty
中的Monoid
定义了“unit”元素。可能使用它的一个特殊情况是,如果我们有一个聚合Monoid
列表的函数:
aggregate :: (Monoid a) => [a] -> a
aggregate [] = mempty
aggregate (x:xs) = x `mappend` aggregate xs
请记住,Monoid
是对常见计算形式的抽象。当您为Monoid
s编写常规函数时,mempty
可能会出现这些函数。