Указание, что тип может существовать только в одном классе, если он уже существует в других классах Haskell.

Я работаю над проблемой, связанной с унификацией, с определяемым пользователем типом Subst a. Проблема гласит:

«Определить класс типов Unified, указывающий, что функция unify::a -> a -> Maybe (Subst a) должна быть определена для любого типа a внутри этого класса. Тип a может быть в классе Unified только в том случае, если он уже в классах Eq и Substitutable, и это должно быть отражено в вашем определении».

Вот как я определил замещаемые и унифицируемые до сих пор:

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

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

Однако я не уверен, как указать, что тип a может быть в классе Unified, только если он уже находится в классах Eq и Substitutable.

Я не ищу ответа на эту конкретную проблему, но в целом, как мне указать, что тип может быть только в одном классе, если он уже находится в других классах?

Спасибо.


person Jenn24    schedule 05.11.2016    source источник


Ответы (1)


Определение класса может содержать ограничения, как функция.

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