指定一个类型只能存在于一个 class 中,如果它已经存在于 Haskell 中的其他 class 中
Specifying that a type can only exist in one class if it already exists in other classes in Haskell
我正在处理一个涉及统一的问题,使用用户定义类型 Subst a。问题是:
"定义一个类型 class Unifiable 指定一个函数 unify::a -> a -> Maybe
(Subst a) 必须为这个 class 中的任何类型 a 定义。类型a只能在
Unifiable class 如果它已经在 Eq 和 Substitutable classes 中,这应该
在您的定义中表示。"
到目前为止,我是这样定义可替换和统一的:
class Substitutable a where
subst :: Subst a -> a -> a
class Unifiable a where
unify :: a -> a -> Maybe (Subst a)
但是,我不确定如何指定类型 a 可以在 Unifiable class 中,前提是它已经在 Eq 和 Substitutable classes 中。
我不是在寻找这个特定问题的答案,但总的来说,我将如何指定一个类型只能在一个 class 中,如果它已经在另一个 class 中]es?
谢谢。
class 定义可以包含约束,就像函数一样。
class (Eq a, Substitutable a) => Unifiable a where
unify :: a -> a -> Maybe (Subst a)
我正在处理一个涉及统一的问题,使用用户定义类型 Subst a。问题是:
"定义一个类型 class Unifiable 指定一个函数 unify::a -> a -> Maybe (Subst a) 必须为这个 class 中的任何类型 a 定义。类型a只能在 Unifiable class 如果它已经在 Eq 和 Substitutable classes 中,这应该 在您的定义中表示。"
到目前为止,我是这样定义可替换和统一的:
class Substitutable a where
subst :: Subst a -> a -> a
class Unifiable a where
unify :: a -> a -> Maybe (Subst a)
但是,我不确定如何指定类型 a 可以在 Unifiable class 中,前提是它已经在 Eq 和 Substitutable classes 中。
我不是在寻找这个特定问题的答案,但总的来说,我将如何指定一个类型只能在一个 class 中,如果它已经在另一个 class 中]es?
谢谢。
class 定义可以包含约束,就像函数一样。
class (Eq a, Substitutable a) => Unifiable a where
unify :: a -> a -> Maybe (Subst a)