2016-11-27 2 views
2

Можно ли требовать, чтобы ассоциированный синоним типа какого-либо класса являлся экземпляром какого-либо другого класса? Например. что-то вроде следующего кода (не компилируется!):Требовать экземпляр typeclass для связанного с haskell типа синонима

class Test a where 
    type Foo a 
    instance Show (Foo a) 

я мог бы рассчитывать на то, что Foo a является Show состоянии независимо от того, о котором идет речь в частности a.

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

+1

Вы можете написать 'класса Show (Foo а) => Тестирование а, где тип Foo a', но я не знаю, можно ли для эмуляции чего-то типа 'class (forall a. Show (Foo a)) => Проверить a где type Foo a'. – user3237465

ответ

1

Найден ответ, спасибо lyxia на #haskell:

class (Show (Foo a)) => Test a where 
    type Foo a 
Смежные вопросы