Я работаю над проблемой, связанной с унификацией, с определяемым пользователем типом 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.
Я не ищу ответа на эту конкретную проблему, но в целом, как мне указать, что тип может быть только в одном классе, если он уже находится в других классах?
Спасибо.