ЭТО БЛОГ НБРК

ДБРО ПОЖА В МОЙ БЛОГ . ТУТ Я ПУБЛ ВСЯК РАЗН ЗПСИ И ЗМТК О ПРОГ , ЯЗКЕ ИЛИ ДАЖЕ О ЖИЗН . В ОСНО ДЛЯ СЕБЯ , ЧТОБ ПТОМ СМТР ИЗ БУДЩ .

НЕКТ МОИ ТЕХН ПРОЭ ЕСТЬ НА ГТХБ , И ТУТ Я ИНГД ПУБЛ ПРОЧ ИДЕИ ИЛИ ДОП ТЕОР ДОКИ ПО НИМ . В НАСТ МОМТ Я ИССЛ ВОЕН ИГРЫ И КОМП СИМУ .

КСТА , ОЧЕН МНОГ ХОРШ СЛОВ УМЕЩ ВСГО В ЧТРЕ СИМВ , НАПР UNIX, СИ++ ИЛИ НБРК .

Монада Identity или почему Haskell - самый лучший императивный язык программирования

Введение Предположим, что у нас есть целая библиотека архи-полезных функций: timesTwo :: Int -> Int timesTwo = (* 2) timesTen :: Int -> Int timesTen = (* 5) . timesTwo isBig :: Int -> Bool isBig = (>= 100) countChars :: String -> Int countChars = length Мы составили (популярную) компьютерную программу на базе этой библиотеки (точка . – операция композиции функций): program = isBig . timesTen . countChars Программа принимает на вход строку, а выдаёт значение “истина/ложь”.
ЧТАТ ПОЛН →

Контравариантные функторы, бифункторы, профункторы в Haskell

Введение Предположим, что у нас есть следующая структура данных, моделирующая некоторое абстрактное преобразование сущности i в сущность o: newtype ConversionFromTo i o = ConverterFromTo { convertFromTo :: i -> o } Типы i и o мыслятся входом и выходом соответственно: функция convertFromTo просто запускает описанное в ConversionFromTo i o преобразование над аргументом типа i. Обратим внимание, что последовательность аргументов важна, и первым параметром к конструктору значения типа ConversionFromTo i o идёт тип входного сигнала.
ЧТАТ ПОЛН →

На пути к пониманию стрелок (Arrow): функции с памятью

Стрелки (тайпклассы и комбинаторы из Control.Arrow) являются замечательным обобщением понятия функции. Стрелка y a b представляет собой некоторый процесс, принимающий значения типа a и выдающий значения типа b. Помимо прочих мест, довольно подробная статья про стрелки есть на англоязычном Викиучебнике. Ниже я попробую пересказать её часть своими словами и подробно объяснить некоторые моменты (отсутствующие в Вики), которые сам понял не сразу. Стрелочных комбинаторов >>>, first, &&& и прочих я коснусь в отдельной статье.
ЧТАТ ПОЛН →

Простое объяснение идеи монад за 30 секунд

Композиция Нестрого заметим, что любая компьютерная программа представляет собой некий абстрактный вычислительный блок. Вычислительный блок просто соединяет вход программы с её выходом (результатом). Довольно сложно проектировать и поддерживать большие программы, состоящие из одного громадного вычислительного блока. Искусство програмирования, поэтому, есть искусство разбиения большого вычислительного блока на несколько малых блоков. Каждый блок при этом призван решить свою собственную подпроблему (подзадачу). Так достигается модульность решения задачи. Раньше у нас был один единственный вычислительный блок, а теперь – несколько маленьких блоков.
ЧТАТ ПОЛН →

Линзы в Haskell: эквивалентности (Equality)

В прошлой записи мы в общих чертах ознакомились с замечательным пакетом lens, реализующим технику функционального программирования, известную как линзы (обобщённые геттеры и сеттеры). В пакете определена целая иерархия “разновидностей” линз, откуда и разные названия для их типов: Equality, Iso, Lens, Prism, Getter, Traversal и т.д. Комбинаторы с верхних уровней следующей диаграммы можно применять к типам на нижележащих уровнях: Чтобы лучше овладеть пакетом lens, на протяжении нескольких записей я попробую вкратце сформулировать особенности и цели использования, а также привести содержательные примеры для каждого из типов с диаграммы выше.
ЧТАТ ПОЛН →