Comparison 的 Monoid 实例在哪里定义?

2024-01-05

newtype Comparison a定义于Data.Functor.Contravariant http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Data.Functor.Contravariant.html#Comparison.

在此模块的版本中定义contravariant-1.5 http://hackage.haskell.org/package/contravariant-1.5/docs/src/Data.Functor.Contravariant.html#Comparison, the Monoid实例于Contravariant定义如下:

instance Monoid (Comparison a) where
  mempty = Comparison (\_ _ -> EQ)
  mappend (Comparison p) (Comparison q) = Comparison $ mappend p q

Data.Functor.Contravariant也在 base 中定义(显然,从 GHC 8.6.1 开始)。 在基地,Monoid实例于Comparison被定义为如下 http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Data.Functor.Contravariant.html#Comparison:

deriving instance Semigroup (Comparison a)
deriving instance Monoid (Comparison a)

实例的用途是什么Monoid (Comparison a)在基数中自动导出?

我应该在哪里查看定义mempty and mappend for it?


For newtypes, with GeneralizedNewtypeDeriving启用后,实例是使用基础类型的实例获取的。

So, mempty @ a -> a -> Ordering被使用(同上mappend),然后重新包装为mappend :: Comparison a.

请注意,这最终涉及函数类型的半群/幺半群实例b -> c以及那些用于Ordering.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Comparison 的 Monoid 实例在哪里定义? 的相关文章

随机推荐