我正在Haskell中编写一个小函数式编程语言,但我找不到如何实现(==)的定义,因为这看起来很棘手?
答案 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如何尝试解决问题。 您可能还会查看其他语言的解释器/编译器的源代码,其中一些是考虑到学习的。