一个组扩展了一个monoid的概念以允许逆。这允许:
gremove :: (Group a) => a -> a -> a
gremove x y = x `mappend` (invert y)
但是,像自然数这样没有逆的结构呢?我在考虑:
class (Monoid a) => MRemove a where
mremove :: a -> a -> a
与法律:
x `mremove` x = mempty
x `mremove` mempty = x
(x `mappend` y) `mremove` y = x
另外:
class (MRemove a) => Group a where
invert :: a -> a
invert x = mempty `mremove` x
-- | For defining MRemove in terms of Group
defaultMRemove :: (Group a) => a -> a -> a
defaultMRemove x y = x `mappend` (invert y)
所以,我的问题是:
MRemove
是什么? 最佳答案
您要查找的名称是可消除的单义词,尽管严格来讲,可消除的半群足以捕获减法的概念。一年多以前,我一直在想知道同样的问题,我通过研究数学术语找到了答案。看一看增量解析器包中的CancellativeMonoid类。我目前正在准备一个新软件包,其中仅包含monoid子类及其一些实例,我希望尽快发布它。
关于haskell - “subtraction”但无逆的结构是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14913904/