Алгебраические типы данных и их использование в программировании
Роман Душкин
Аннотация Статья рассматривает важную идиому программирования - алгебраический тип данных (АТД). Приводится теоретическая база, которая лежит в основе практического применения АТД в различных языках программирования. Прикладные аспекты рассматриваются на языке
(
Read more... )
Reply
Reply
В Хаскелле этого нету? Ну хоть чего-то. :)
Reply
Reply
Reply
Типы Maybe Int и Maybe Char - разные, хотя и пересекаются по конструкторам.
Reply
Я про такой вопрос: если у нас есть data Maybe a = Nothing | Just a, можем ли мы определить тип data AnotherBool = Nothing | Something ?
Reply
Reply
А в Хаскеле что, до сих пор есть principal typing??
Reply
Reply
data Maybe a = Nothing | Just a
"в отрыве" от монад? Т. е. что означают подобные конструкции сами по себе?
Reply
Reply
Reply
lionet в соседнем топике написал примерно. в переводе на С++ запись data a = Nothing | Maybe a означает:
template
class Maybe
{
enum { tagMaybe, tagNothing } tag;
tag t;
union {
void mNothing;
struct {
a anon_m1;
}
}
public:
a getMaybe();
void getNothing();
bool isMaybe();
bool isNothing();
void setMaybe(a);
void setNothing(void);
}
Reply
Думай о нём, как о контейнере опционального значения. Либо содержит, либо не содержит.
Эта конкретная штука моделирует такие вещи, как вызов функции, которая может дать результат, а может не дать.
Причём, другие функции могут и не знать, какой результат возвращается: они могут уметь работать с любыми данными, "обёрнутыми" в Maybe. Например, превращать списки Maybe a в с писки a:
catMaybes :: [Maybe a] -> [a]
В этом случае, эта функция объединит список [Just 3, Just 4, Nothing, Just 7] в [3, 4, 7], ничего не подозревая о типе Maybe Int.
Reply
const :: a -> b или id :: a -> a
Reply
Leave a comment