Skip to content

Instantly share code, notes, and snippets.

@SergProduction
Last active July 20, 2018 21:11
Show Gist options
  • Save SergProduction/17a3b90af6cb19b374a2dfa8ab443053 to your computer and use it in GitHub Desktop.
Save SergProduction/17a3b90af6cb19b374a2dfa8ab443053 to your computer and use it in GitHub Desktop.

Введение

Конктруктор - являеться значением. Им можно оперировать в программе как любым дригим значением, Например как строкой или числом

Тип - работает так же как и в других языках

Основы

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-

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment