Size: a a a

PureScript — русскоговорящее сообщество

2019 June 04

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
то есть где-то Foo X Y, а где-то Foo Z Y
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
и все в одной мапе
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
или такие не могут лежать в одной мапе?
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
в определении типа DifferentFoos вы делаете утверждение (накладываете ограничение), что DifferentFoos это враппер для Map, в котором ключами являются все такие Foo c d, которые работают на любом c
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
не уверен, что я правильно объясняю и как правильно нужно это объяснять
источник

KV

Kirill Valyavin in PureScript — русскоговорящее сообщество
Anton Kotenko
потому что читаю forall c. как "для любого C, в том числе и конкретного"
Так это значит, что надо предоставить для любого c, а не для конкретного
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
не уверен, что я правильно объясняю и как правильно нужно это объяснять
похоже, что правильно, потому что понимаю)
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
типа если я сказал что "для всех c", то это значит "для всех c" и во всех вложенных/зависимых типах
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
можно попробовать прочитать этоhttps://ocharles.org.uk/guest-posts/2014-12-18-rank-n-types.html
источник

KV

Kirill Valyavin in PureScript — русскоговорящее сообщество
Да просто в типе (Map String (forall c. Foo c d)) написано, что значения - это функции (на уровне типов), которые принимают любой c и возвращают Foo c d для какого-то d
источник

KV

Kirill Valyavin in PureScript — русскоговорящее сообщество
Соответственно, там и должны быть такие функции, а не конкретные значения
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
да, т.е. d может быть конкретный
(как у вас в myFoo :: Foo X Yd это Y),
а вот c — любой
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Так, ещё лучше, спасибо вам!
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
можно попробовать прочитать этоhttps://ocharles.org.uk/guest-posts/2014-12-18-rank-n-types.html
И это почитаю
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Но d получается, конкретный для всего мапа, то есть у всех значений (функций) в мапе должен быть один и тот же d (здесь — Y)?
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
да, потому что DifferentFoos d, это как бы ф-ция на уровне типов: DifferentFoos d = как бы говорит "дай мне d и я верну тебе конкретный тип для этого d"
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
да, теперь понимаю, и логично, что нельзя класть в Map значения с разными c, как и нельзя класть значения просто различных типов.
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
но можно сделать так, чтобы было можно
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Так, прошу раскрыть секрет)
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
ну вот как тут https://wiki.haskell.org/Existential_type
например, определить класс какой-то, вот как там с примером Renderable
источник