【发布时间】:2010-10-18 17:45:26
【问题描述】:
我正在编写 Haskell,但这可以应用于任何具有 ADT 概念的 OO 或函数式语言。我将在 Haskell 中给出模板,忽略算术运算符已被采用的事实:
class Thing a where
(+) :: a -> a -> a
(-) :: a -> a -> a
x - y = x + negate y
(*) :: (RealFrac b) => a -> b -> a
negate :: a -> a
negate x = x * (-1)
基本上这些是可以加减的东西,也可以乘以实小数。一个例子可能是一个简单的数字列表:加法和减法是成对的(在 Haskell 中,“(+) = zipWith (+)”),乘以一个实数将列表中的每个项目乘以相同的数量。我遇到了足够多的其他示例,想将其定义为一个类,但我不知道该叫什么。
在 Haskell 中,只要有某种零值,它通常是一个幺半群。
这是代数类型动物园中某种已知的对象吗?我查看了环、半环、近半环、组等,但没有找到。
【问题讨论】:
-
我建议完全避免使用 ADT 这个术语,它可以像 OO 语言一样用于“代数数据类型”或“抽象数据类型”。由于这种模棱两可,我有点想念这个问题。
标签: haskell abstract-data-type