Created
March 31, 2020 06:15
-
-
Save AlexeyRaga/9825fb67e0a926005d72032e59182a27 to your computer and use it in GitHub Desktop.
1с-подобный Хаскель
This file contains 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 characters
---------------- Базовое ---------------------- | |
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