Skip to content

Instantly share code, notes, and snippets.

@AlexeyRaga
Created March 31, 2020 06:15
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlexeyRaga/9825fb67e0a926005d72032e59182a27 to your computer and use it in GitHub Desktop.
Save AlexeyRaga/9825fb67e0a926005d72032e59182a27 to your computer and use it in GitHub Desktop.
1с-подобный Хаскель
---------------- Базовое ----------------------
type Число = Int
type Строка = Text
type Строчное = Show
type ИО = IO
type Сравнимое = Eq
type Упорядоченное = Ord
печатать :: Строчное значение => значение -> ИО ()
печатать = print
---------------- Скукоживаемый -----------------
type Скукоживаемый = Foldable
скукожить :: Скукоживаемый контейнер
=> (аккумулятор -> значение -> аккумулятор)
-> аккумулятор
-> контейнер значение
-> аккумулятор
скукожить = foldl
---------------- Волшебный -----------------------
type Волшебный = Functor
превратить :: Волшебный контейнер
=> (староеЗначение -> новоеЗначение)
-> контейнер староеЗначение
-> контейнер новоеЗначение
превратить = fmap
----------------- Есть чё? -----------------------
type Возможно = Maybe
pattern Есть :: всё -> Возможно всё
pattern Есть чё = Just чё
pattern НетЗначения :: Возможно значение
pattern НетЗначения = Nothing
наКрайняк :: значение -> Возможно значение -> значение
наКрайняк = fromMaybe
----------------- ИлиИли -------------------------
type ИлиИли = Either
pattern Там :: там -> ИлиИли там тут
pattern Там там = Left там
pattern Тут :: тут -> ИлиИли там тут
pattern Тут тут = Right тут
поЛюбому :: (там -> здесь) -> (тут -> здесь) -> ИлиИли там тут -> здесь
поЛюбому = either
------------------ Лист
раздербанить :: (значение -> Возможно (элемент, значение)) -> значение -> [элемент]
раздербанить = unfoldr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment