【发布时间】:2016-03-08 20:21:18
【问题描述】:
我有以下数据类型和半群实例:
data Or a b =
Fst a
| Snd b deriving (Eq, Show)
instance Semigroup (Or a b) where
(<>) (Fst a) (Fst b) = Fst b
(<>) (Snd a) (Fst b) = Snd a
(<>) (Fst a) (Snd b) = Snd b
(<>) (Snd a) (Snd b) = Snd a
我想为上述类型创建一个幺半群实例,但我不知道该怎么做。如果我使用以下定义
instance (Monoid a, Monoid b) => Monoid (Or a b) where
mempty = (Fst mempty)
mappend = (<>)
它将适用于 <> 的所有输入对,除了我 mappend 的输入对
(Fst a) <> mempty
这将评估为mempty。
如何解决此问题以使mempty 有效?似乎没有一些新的语法或概念就无法完成,因为它取决于内存是在左边还是右边......
【问题讨论】:
-
老实说,这里似乎没有一个幺半群。 没有标识元素。
-
奇怪。为它实现一个幺半群是 Haskell 书中的一个练习,haskellbook.com