У меня есть класс типов со связанным типом:
class Foo a where
type Bar a :: *
...
Теперь я хотел бы создать экземпляр этого класса для составного типа, содержащего экзистенциально количественные переменные типа:
data Blat = forall a. Blat a
instance Foo Blat where
type Bar Blat = ???
В моем реальном приложении "???" для правильной логики программы необходимо использовать экзистенциально скрытое «а» в Blat a
.
Это возможно в Хаскеле?
Если да, то как?
===
В ответ на запрос @leftaroundabout о полном раскрытии моего первоначального намерения:
Я пытаюсь построить представления типов, используя только небольшой набор «примитивов» (то есть - единицу, сумму и произведение).
И для составных типов я хотел бы заручиться помощью ранее существовавших экземпляров представления для полей, составляющих новый тип.
Для явно параметризованных типов полей это просто.
Однако я хотел бы иметь возможность делать это для типов полей, используя также параметры скрытого типа.