一个组扩展了一个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/

10-11 10:51