如何在Haskell中定义(==)?

时间:2009-10-09 21:03:11

标签: haskell interpreter

我正在Haskell中编写一个小函数式编程语言,但我找不到如何实现(==)的定义,因为这看起来很棘手?

4 个答案:

答案 0 :(得分:14)

Haskell使用“类型类”的概念。实际定义是这样的:

class Eq a where
  (==) :: a -> a -> Bool
  -- More functions follow, for more complex concepts of equality (eg NaN)

然后您可以为自己的类型定义它。例如:

-- Eq can't be automatically derived, because of the function
data Foo = Foo Int (Char -> Bool)

-- So define it here
instance Eq Foo where
  (Foo x _) == (Foo y _) = x == y

答案 1 :(得分:11)

答案 2 :(得分:8)

(==)是类Eq的一部分。实例Eq的每种类型都提供单独的实现。因此,要查找实现,您通常应该查看定义类型的位置。

答案 3 :(得分:-3)

闻起来像我的作业。详细说明为什么你觉得它很棘手。 您可能会看看ML和各种Lisps如何尝试解决问题。 您可能还会查看其他语言的解释器/编译器的源代码,其中一些是考虑到学习的。