ЭТО БЛОГ НБРК

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

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

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

Линзы и призмы в Haskell

Введение Линзы – это функциональные композиционабельные проекции типов, сильно облегчающие доступ к многоуровневым, вложенным структурам данных. Под “проекцией типа” я здесь имею в виду некоторый тип T, конструируемый N-арным конструктором значений makeT, вместе с некоторой функцией proj_N, деконструирующей значение T в его N-ый элемент: data T = makeT A B C D proj_A :: T -> A proj_B :: T -> B proj_C :: T -> C proj_D :: T -> D т.
ЧТАТ ПОЛН →

Реализация Random для перечисляемого и ограниченного типа

Предположим, что у нас есть следующий тип, описывающий вид дерева (дуб, сосна, берёза, …): data TreeType = Pine | Oak | Birch | Maple Мы бы хотели уметь строить дерево случайного вида, т.е. использовать интерфейс тайпкласса Random и комбинаторы из System.Random: Тайпкласс Random Тайпкласс случайных величин Random в Haskell имеет следующий интерфейс: randomR :: (RandomGen g, Random a) => (a, a) -> g -> (a, g) random :: (RandomGen g, Random a) => g -> (a, g) Обе функции принимают на вход детерминированный генератор псевдослучайных чисел, а функция randomR также - мнимальное и максимальное значение случайной величины, в интервале между которыми и будет сделан случайный выбор.
ЧТАТ ПОЛН →

Простейший (ан)парсинг типов Haskell в JSON c Data.Aeson

Введение Сериализация и десериализация типов Haskell в популярный формат JSON проста как пробка с пакетом Aeson (Data.Aeson). Положим, что T - тип данных, который мы хотим сохранять в и считывать из формата JSON. Для этого нам нужны стрелки (изоморфизм) между типами T и ByteString, строками, содержащими все корректные JSON-репрезентации значений нашего T. Пакет Data.Aeson содержит высокоэффективные функции работы с форматом JSON. Среди прочих имеем функции кодирования и декодирования между JSON и типами Haskell:
ЧТАТ ПОЛН →

Частичные функции и композиция Клейсли

Частичными называют такие функции, которые не определены для некоторых значений своего аргумента. Например, отображение “рост_в_сантиметрах” из множества людей в множество натуральных чисел определено на всей области определения (каждому человеку поставлено в соответствие число), тогда как отображение “зарплата” определено не для каждого человека (кто-то не работает). Компьютерная программа – это композиция (то есть функция от функции от … от функции аргумента) некоторых “функциональных блоков”. Например, программа-просмотрщик картинок вроде geeqie является удачной композицией функций из графической библиотеки GTK, библиотек декодирования изображений JPEG, PNG, стандартных библиотек языка Си и т.
ЧТАТ ПОЛН →

Идея: обобщённый нотариус на смарт-контрактах

В процессе знакомства с замечательной, поистине революционной технологией “всемирного компьютера” Ethereum и языка описания смарт-контрактов Solidity, у меня возникла следующая скромная идея. А что если (в отличии от не менее интересных электронных нотариальных сервисов) трактовать само понятие “нотариуса” (уполномоченной свидетельствовать верность документов сущности) более общо? Обычный нотариус Например, традиционный нотариус, заверяющий ксерокопию паспорта или свидетельство о браке, по сути есть не что иное, как функция: notarify :: Document -> Proof -> Fee -> (Document, Signature) То есть пафосная тётя из нотариальной конторы фактически принимает от клиента:
ЧТАТ ПОЛН →