Last active
July 20, 2018 21:11
Revisions
-
SergProduction revised this gist
Jun 6, 2018 . 1 changed file with 5 additions and 6 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,6 +1,6 @@ ### Введение Конктруктор - является значением. Им можно оперировать в программе как любым дригим значением, Например как строкой или числом @@ -9,7 +9,7 @@ ### Основы `data 'тип' = 'конструктор'` - Единичный тип. Тип состоящий из одного конструктора - Объявление @@ -60,14 +60,13 @@ - Объявление Mожно не ограничеваться только примитивными типами при объявлении типа конструктора. Для этого следует передавать общий тип. Общий тип сам по себе конструктор не может принимать, его нужно передавать через тип - `data A a = A a` - `data B a b = A a b` - Использование -
SergProduction revised this gist
Jun 4, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -60,7 +60,7 @@ - Объявление Mожно не ограничеваться только примитивными типами при объявлении типа конструктора. для этого следует передавать общий тип. Общий тип сам по себе конструктор не может принимать, -
SergProduction revised this gist
Jun 4, 2018 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -29,7 +29,7 @@ - `data Unit = Unit` `data 'тип' = 'конструктор' 'тип' ['может быть сколько угодно параметров']` - Объявление -
SergProduction revised this gist
Jun 4, 2018 . 1 changed file with 43 additions and 11 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,7 +8,7 @@ ### Основы `data 'тип' = 'конструктор'` - Единичный тип. Тип сосоящий из одного конструктора - Объявление @@ -18,7 +18,7 @@ Пространство имён типов не пересекается с пространством имён конструкторов, поэтому конструктор можно называть так же как и тип. В дальнейшем чтении **не путать имена типов и имена конструторов** * 1 - Использование @@ -40,8 +40,8 @@ - `data B = B String` - `data С = С Int String` - `data D = D A B` - конcтруктор `D` применяеться к типу `A` который состоит из конструктора `A Int`, и к типу `B` который состоит из конструктора `B String`. см. * 1 - Использование @@ -56,7 +56,7 @@ ### Полиморфизм `data 'тип' 'общий_тип' = 'конструктор' 'общий_тип'` - Объявление @@ -66,15 +66,47 @@ Общий тип сам по себе конструктор не может принимать, его нужно передавать через тип - `data A a = A a` - `data A a b = A a b` - Использование - `A 10` - `A "СТРОКА"` - `B 10 "СТРОКА"` ### Сумма типов - `data Bool = False | True` - `data ABC = A | B | C` Суммарные типы данных названы потому, что они суммируют типы данных, которые их составляют. Например, если суммировать единичные типы данных, получается перечисление. ### Произведение типов - `data Pair a b = Pair a b` - `data Triple a b c = Triple a b c` Типы произведений названы так, что их можно представить как произведение нескольких типов, которые его составляют. ### Комбинируем все - `data Maybe a = Nothing | Just a` теперь мы можем комбинировать суммы типов с произведением, и получать более сложные типы ### Рекурсивные типы данных - `data List a = Nil | Cons a (List a)` [еще есть](https://habr.com/post/207126/) - Записи - Вставки или Враперы - Степенные типы данных - Фантомные типы данных - Экзистенциальные типы данных - Обобщённые Алгебраические Типы Данных (GADTs) - Параметрические типы данных с ограниченными параметрами -
SergProduction created this gist
Jun 4, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,80 @@ ### Введение Конктруктор - являеться значением. Им можно оперировать в программе как любым дригим значением, Например как строкой или числом Тип - работает так же как и в других языках ### Основы `data 'тип' = 'конструктор'` - Единичный тип. Тип сосоящий из одного конструктора - Объявление - `data A = A` - `data A = B` Пространство имён типов не пересекается с пространством имён конструкторов, поэтому конструктор можно называть так же как и тип. В дальнейшем чтении не путать имена типа и имена конструторов - Использование Единичные типы данных не дают ничего, кроме знания о том, что он есть. Из распространённых типов данных используются - `data () = ()` - `data Unit = Unit` `data 'тип' = 'конструктор' 'параметр' ['может быть сколько угодно параметров']` - Объявление При объявлении мы указываем `'конструктор' 'тип'`. В параметре конcтруктора указываеться тип значения которое он может принимать - `data A = A Int` - `data B = B String` - `data С = С Int String` - `data D = D A B` - конcтруктор `D` применяеться к типу `A` (не конструктор) который состоит из конструктора `A Int` и к типу `B` который состоит из конструктора `B String` - Использование При использовании мы указываем `'конструктор' 'значение'` Конструктор служит своеобразным контейнером для значения. - `A 10` - `B "СТРОКА"` - `C 10 "СТРОКА"` - `D (A 10) (B "СТРОКА")` ### Полиморфизм `data 'тип' 'общий тип' = 'конструктор' 'общий тип'` - Объявление Mожно не ограничеваться только примитивными значениями и конструкторами при объявлении типа конструктора. для этого следует передавать общий тип. Общий тип сам по себе конструктор не может принимать, его нужно передавать через тип - data A a = A a - data A a b = A a b - Использование - A 10 - A "СТРОКА" - B 10 "СТРОКА" ### Сумма типов [asd-](#основы)