AK
Foo X Y, а где-то Foo Z YSize: a a a
AK
Foo X Y, а где-то Foo Z YAK
AK
VY
DifferentFoos вы делаете утверждение (накладываете ограничение), что DifferentFoos это враппер для Map, в котором ключами являются все такие Foo c d, которые работают на любом cVY
KV
forall c. как "для любого C, в том числе и конкретного"AK
AK
c", то это значит "для всех c" и во всех вложенных/зависимых типахVY
KV
(Map String (forall c. Foo c d)) написано, что значения - это функции (на уровне типов), которые принимают любой c и возвращают Foo c d для какого-то dKV
VY
d может быть конкретныйmyFoo :: Foo X Y — d это Y),c — любойAK
AK
AK
d получается, конкретный для всего мапа, то есть у всех значений (функций) в мапе должен быть один и тот же d (здесь — Y)?VY
DifferentFoos d, это как бы ф-ция на уровне типов: DifferentFoos d = как бы говорит "дай мне d и я верну тебе конкретный тип для этого d"AK
Map значения с разными c, как и нельзя класть значения просто различных типов.VY
AK
VY
Renderable