当然,数据类型并不是精确的,但这大致上是如何实现Monoid Bool
的?
import Data.Monoid
data Bool' = T | F deriving (Show)
instance Monoid (Bool') where
mempty = T
mappend T _ = T
mappend _ T = T
mappend _ _ = F
如果是/不是,为什么要将Bool
的mappend
设置为OR
而不是AND
?
newtype
而不是data
呢?谢谢。 - Kevin Meredith(&&)
,(||)
,(==)
,(/=)
都可以成为幺半群运算。但是最后两个没有预定义。 - Ørjan JohansenTrue
对于(==)
实例是mempty
,而False
对于(/=)
实例也是mempty
。此外,在这种情况下,如果其中一个mempty
定律得到满足,另一个也会被满足,因为(==)
和(/=)
都是可交换的。 - David Young<>
具有T <> F /= F <> T
,这意味着既不是F
也不是T
是mempty
。另外两个不符合条件,因为它们的<>
具有T <> F = F = T <> T
,这意味着既不是F
也不是T
是mempty
。另外两个不符合条件,因为它们的<>
有T <> F = T = F <> F
,这意味着既不是F
也不是T
是mempty
。其余的四个是&&
、||
、==
和/=
。 - rampion