ЭТО БЛОГ НБРК

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

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

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

Десериализация в Haskell: парсинг карт TacOps

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

Монада инвестиции: простой язык описания и симуляции инвестиций

Можно просто посмотреть пример. Краткое описание Накатал забавную Haskell-библиотечку для моделирования финансового поведения: инвестиций, личных трат, выплат, торговли на бирже, и прочих алгоритмов продолжительных и условных накоплений и передвижений средств. Смысл простой: тип Investment является синонимом специализации трансформера монад StateT на монаду IO: -- | The investment monad type type Investment a r = StateT (InvestmentState a) IO r При этом тип InvestmentState, описывающий текущее состояние инвестиции (или чьего-то кошелька и долгов…), определён так:
ЧТАТ ПОЛН →

Моделирование валюты в Haskell

Любопытная задачка – смоделировать валюту, т.е. конвертабельные друг в друга денежные средства. Чтобы уметь делать утверждения о валюте, хранить и конвертировать её, нам нужно определить тип для представления денег в программе. В первом приближении можно рассуждать так: data Symbol = USD | RUB | BTC | LTC | ETH | DASH | ZEC type Money = (Symbol, Double) Но при таком подходе типы выражений (USD, 100) (купюра в сто баксов) и (RUB, 1) будут одинаковы, а значит любые комбинаторы над типом Money каким-то образом должны будут учитывать разные денежные знаки (разные конструкторы типа Symbol).
ЧТАТ ПОЛН →

Haskell: F-алгебры, катаморфизмы и foldr

Мой перевод статьи Bartosz Milewski “Understanding F-Algebras” на schoolofhaskell. Что такое алгебра? Говоря наивно, алебра – это такая штука, которая даёт нам возможность производить вычисления с числами и символами. Абстрактная алгебра представляет символы как элементы векторного пространства: они могут умножаться на скаляры и складываться друг с другом. Но что отделяет алгебры от линейных пространств, так это наличие векторного умножения: билинейного произведения векторов, рузультатом которого является другой вектор (против скалярного произведения, которое даёт скаляр).
ЧТАТ ПОЛН →

Прогулки с тайпклассами Haskell: аппликативные функторы

Как мы уже выяснили, функторы позволяют втягивать “обычную” функцию в некоторый вычислительный контекст, превращая её в функцию над контекстами: > :t (* 3) (* 3) :: Num a => a -> a > :t fmap (* 3) fmap (* 3) :: (Functor f, Num b) => f b -> f b В этом примере (* 3) – это функция “утроения” (функция от одного числа, отсюда и a -> a). Функция fmap (* 3) тогда есть “функция утроения содержимого некоторого контейнера (функтора)”.
ЧТАТ ПОЛН →