K
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
Вот примеры суммы и паттерн-матчинга
Size: a a a
K
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
DK
AP
int | str
а вот это юнионDK
AP
Either Int String
и Result Int String
— одинаковые по мощности суммы, но типы разныеMP
AP
int | str
— просто "или число, или строка"AP
DK
interface Just<T> {
tag: 'Just',
value: T,
}
interface Nothing {
tag: 'Nothing',
}
type Maybe<T> = Just<T> | Nothing
AP
Foo
замешатьAP
Just 42
не означает ничегоAP
AP
Nothing : Maybe Int
ты выразить не можешьDK
AP
DK
switch (a.tag) {
'Just': console.log(a.value),
'Nothing': console.log('Nothing')
}
DK
AP