【发布时间】:2012-01-08 15:08:04
【问题描述】:
虽然我在 Haskell 示例代码中看到了各种奇怪的东西 - 我从未见过运算符 plus 被重载。有什么特别之处吗?
假设我有一个像 Pair 这样的类型,我想要像
这样的类型 Pair(2,4) + Pair(1,2) = Pair(3,6)
可以在haskell中做到吗?
我只是好奇,因为我知道在 Scala 中以一种相当优雅的方式是可能的。
【问题讨论】:
-
虽然人们已经回答了如何超载 (+),但您应该使用交互式解释器。您可以尝试执行 (1 + 1) 和 (1.0 + 1.0) 并查看它是否有效。这是一种发现语言的强大方法。
-
Haskell 和 Scala 之间的一个重要区别是重载。当你在 Scala 中做
foo + bar时,它相当于foo.+(bar)。 Scala 是面向对象的,允许同名的方法出现在不同的类中,无论它们的行为是否相似。在 Haskell 中,不同类型的函数只有如果它们是类型类的一部分,则它们可以具有相同的名称。 -
你是说 1+1 和 Pair(1,2) + Pair(2,3) 不能存在于同一个文件中同一时间?
-
不,他是说在这两种情况下,
+是 相同的通用 函数——不是两个不同的函数——它是Num的一部分类型类。 (+有很多不同的实现方式——Num的每个实例都有一个实现方式。
标签: haskell