2016-11-05 8 views
2

사용자 정의 유형 Subst a를 사용하여 통합과 관련된 문제를 해결하려고합니다. 이 문제는 읽습니다.유형이 하스켈의 다른 클래스에 이미 존재하는 경우 하나의 클래스에만 존재할 수 있도록 지정

"형식 클래스를 정의하십시오.이 클래스 내부의 모든 형식에 대해 (Subst a) 함수를 unify해야합니다. a : a -> a -> Eq 및 Substitutable 클래스에 이미있는 경우 Unifiable 클래스 여야하며 을 정의에 나타내야합니다. "

이 내가 Unifiable 지금까지 대체 가능한 정의와 한 방법입니다

class Substitutable a where 
subst :: Subst a -> a -> a 

class Unifiable a where 
unify :: a -> a -> Maybe (Subst a) 

을하지만, 나는 그것이 이미있는 경우에만이 Unifiable 클래스에있을 수있는 유형을 지정에 대해 이동하는 방법을 잘 모르겠어요 Eq 및 Substitutable 클래스.

이 특정 문제에 대한 답변을 찾고 싶지 않지만 일반적으로 유형 지정은 다른 클래스에 이미있는 경우 한 가지 유형으로 만 지정할 수 있습니까?

감사합니다.

답변

6

클래스 정의에는 함수와 마찬가지로 제약 조건이 포함될 수 있습니다.

class (Eq a, Substitutable a) => Unifiable a where 
    unify :: a -> a -> Maybe (Subst a)