Как написать экземпляр типа для составного типа, имеющего экзистенциально количественные переменные типа? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть класс типов со связанным типом:

class Foo a where
  type Bar a :: *
  ...

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

data Blat = forall a. Blat a

instance Foo Blat where
  type Bar Blat = ???

В моем реальном приложении "???" для правильной логики программы необходимо использовать экзистенциально скрытое «а» в Blat a.

Это возможно в Хаскеле?
Если да, то как?

===

В ответ на запрос @leftaroundabout о полном раскрытии моего первоначального намерения:

Я пытаюсь построить представления типов, используя только небольшой набор «примитивов» (то есть - единицу, сумму и произведение). И для составных типов я хотел бы заручиться помощью ранее существовавших экземпляров представления для полей, составляющих новый тип. Для явно параметризованных типов полей это просто. Однако я хотел бы иметь возможность делать это для типов полей, используя также параметры скрытого типа.

1 Ответ

0 голосов
/ 05 сентября 2018

Это не может быть сделано. Экзистенциально количественный тип выбирается только во время выполнения, тогда как создание экземпляров семейства типов (связанных или иных) должно быть исправлено во время компиляции.

Вероятно, это проблема XY . Вместо связанного семейства типов вы должны иметь дело с информацией о типе каким-либо другим способом, но для того, чтобы сказать, как это нужно, потребуется знание проблемы, которую вы пытаетесь решить.

...