Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 这种抽象数据类型叫什么?_Haskell_Abstract Data Type - Fatal编程技术网

Haskell 这种抽象数据类型叫什么?

Haskell 这种抽象数据类型叫什么?,haskell,abstract-data-type,Haskell,Abstract Data Type,我正在写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

我正在写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是您编写代码的语言(并且您不介意使用语言扩展),那么有一个叫做“向量空间”的很好的黑客库,它已经有了一个这方面的类。谢谢。这就是我想要的。谢谢mokus给我指了指这个包,里面有一个很好的代数结构层次,是的,我看了数字前奏。然后我看着标准的前奏曲,直到我的头停止旋转。尽管我发现标准前奏很有约束性,特别是在试图定义“instance Num VectorSpace”之类的东西时,我仍然更喜欢它,而不是数字前奏的百科全书式的复杂性。