输入 类 - 简要说明
Type classes - Brief Explanation
我是 Haskell 的新手,我有 C++ 背景。
我在理解类型和类型 classes 之间的关系时遇到了一些问题。
据我了解,type classes 指定了一堆函数。像 Eq
类型 class 指定 ==
和 /=
.
但现在假设我有一个类型 t
,当我说 t
是 Eq
类型 class 的实例时,这意味着什么?是否仅仅意味着 t
支持并实现了 Eq
指定的功能?
Does it simply mean that t supports and implements the functions specified by Eq ?
是的,正是。
它只是意味着有一个 Eq t
的实例,它根据 Eq
的要求定义了运算符 (==)
。因此,您可以在代码中对 t
类型使用上述运算符。
一个愚蠢的例子:
data MyPair = P Int String
instance Eq MyPair where
(P i1 s1) == (P i2 s2) = -- we define equality ...
i1==i2 && s1==S2 -- ... as component-wise equality
testTrue :: Bool
testTrue = (P (1+1) "aa") == (P 2 ("a"++"a"))
在上面的例子中,常见的成语实际上是
data MyPair = P Int String deriving Eq
自动派生实例 -- 因此无需显式编写。
我是 Haskell 的新手,我有 C++ 背景。
我在理解类型和类型 classes 之间的关系时遇到了一些问题。
据我了解,type classes 指定了一堆函数。像 Eq
类型 class 指定 ==
和 /=
.
但现在假设我有一个类型 t
,当我说 t
是 Eq
类型 class 的实例时,这意味着什么?是否仅仅意味着 t
支持并实现了 Eq
指定的功能?
Does it simply mean that t supports and implements the functions specified by Eq ?
是的,正是。
它只是意味着有一个 Eq t
的实例,它根据 Eq
的要求定义了运算符 (==)
。因此,您可以在代码中对 t
类型使用上述运算符。
一个愚蠢的例子:
data MyPair = P Int String
instance Eq MyPair where
(P i1 s1) == (P i2 s2) = -- we define equality ...
i1==i2 && s1==S2 -- ... as component-wise equality
testTrue :: Bool
testTrue = (P (1+1) "aa") == (P 2 ("a"++"a"))
在上面的例子中,常见的成语实际上是
data MyPair = P Int String deriving Eq
自动派生实例 -- 因此无需显式编写。