Size: a a a

Elm Lang сообщество разработчиков

2020 November 02

K

Kir in Elm Lang сообщество разработчиков
Denis Krivosheev
Расскажи про размеченные суммы и пат. Мат.... хотя бы расшифруй))
type Either a b = Left a | Right b

either : (a -> c) -> (b -> c) -> Either a b -> c
either f g e = case e of
 Left  a -> f a
 Right b -> g b

Вот примеры суммы и паттерн-матчинга
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
это размеченная сумма
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Нет нет погоди... там есть метка и каста не надо делать
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
int | str
а вот это юнион
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Нене погоди
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Суть в том, что Either Int String и Result Int String — одинаковые по мощности суммы, но типы разные
источник

MP

Max P in Elm Lang сообщество разработчиков
так-с, ну началось! 🍿
источник

MB

Mikhail Bortnyk in Elm Lang сообщество разработчиков
🍿
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
А int | str — просто "или число, или строка"
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Ты можешь это забоксить, но это ж костыль
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
typescript давно уже вот так умеет
interface Just<T> {
   tag: 'Just',
   value: T,
}

interface Nothing {
   tag: 'Nothing',
}

type Maybe<T> = Just<T> | Nothing
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Но ты можешь ровно эти же "конструкторы" ещё и с Foo замешать
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
А по месту Just 42 не означает ничего
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Ты не знаешь, частью какой суммы он является
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
И Nothing : Maybe Int ты выразить не можешь
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
знаешь
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Потому что Nothing и Just — вообще никак не связанные штуки
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
switch (a.tag) {
   'Just': console.log(a.value),
   'Nothing': console.log('Nothing')
}
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
вот в примере тайпскрипт понимает что в ветке джаст лежит тип джаст
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Это в конкретном месте ты матчишь и тут юнион на входе
источник