Size: a a a

2021 January 24

AP

Aleksei (astynax) Pi... in Haskell Start
С extensible records в каком-то месте кода можно знать, что "тип такой-то" имеет "поле такое-то" и это знание будет проверять компилятор. Но тогда придётся компилятору доказать, что имея на входе произвольный список полей, вы сможете гарантировать что "поле такое-то" точно будет представлено на выходе.
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Доказательство будет выглядеть как-то так
decode
 :: HasField "name" String out
 => HasField "age" Int out
 => in -> Maybe out
(псевдокод)
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Подытожу, если хотите "как в Питоне" — берите Map или Value из aeson.
источник

JS

Jerzy Syrowiecki in Haskell Start
"динамический тип с полями" — это же Map и есть
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Map String :)
источник

A

Aragaer in Haskell Start
Вообще есть список пар и там тоже есть lookup
источник

A

Aragaer in Haskell Start
но map все равно лучше
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Map гарантирует уникальность ключей, это ценно
источник

IK

Ilya Kos in Haskell Start
Artur Sult
Привет, подскажите пожалуйста. Хочу создать тип с динамическими полями, как это сделать? Например, у меня будет список названий полей, например ['id', 'firstname', 'lastname'],  я из него хочу динамически получить тип User:
data User = User
   { id :: Id User
   , firstname :: Text
   , lastname :: Text
   }
Соответсвенно, если список будет другой, например [id, firstname, lastname, email, password], то и тип должен быть с соответствующими полями. В питоне сделать такое проще простого, а тут как?
Но у вас же наверное есть какой-то набор полей, который вы в принципе можете обрабатывать
источник

IK

Ilya Kos in Haskell Start
Или вам нужно просто их хранить?
источник
2021 January 26

IK

Ilya Kos in Haskell Start
источник

SP

Stanislav Popov in Haskell Start
он хочет метапрограммированием создать рекорд. ну это какойнибудь темплейт хаскель вероятно
источник

SP

Stanislav Popov in Haskell Start
Artur Sult
Привет, подскажите пожалуйста. Хочу создать тип с динамическими полями, как это сделать? Например, у меня будет список названий полей, например ['id', 'firstname', 'lastname'],  я из него хочу динамически получить тип User:
data User = User
   { id :: Id User
   , firstname :: Text
   , lastname :: Text
   }
Соответсвенно, если список будет другой, например [id, firstname, lastname, email, password], то и тип должен быть с соответствующими полями. В питоне сделать такое проще простого, а тут как?
а как такое сделать в питоне?
источник

AT

Alexander T in Haskell Start
Stanislav Popov
а как такое сделать в питоне?
просто словарь
источник

SP

Stanislav Popov in Haskell Start
не. там можно датакласс, неймедтупл
источник

AT

Alexander T in Haskell Start
…из словаря, да?
источник

SP

Stanislav Popov in Haskell Start
из списка полей
источник

SP

Stanislav Popov in Haskell Start
ну в тайпскрипте например имея статический список из текстовых литералов можно сделать статический обьект с набором ключей - этими литералами
источник

SP

Stanislav Popov in Haskell Start
помимо этого есть всякие Pick
источник

SP

Stanislav Popov in Haskell Start
когда по списку полей можно создать тип из существующего
источник