Андрей Власовских

Блог Андрея Власовских

Posts Tagged ‘haskell

Монады в OCaml

leave a comment »

В блогах уже есть, конечно, рассказы о монадах в OCaml, например, A Monad Tutorial for OCaml и Syntax Extension for Monads in OCaml. Однако меня интересовало воссоздание соответствующих классов типов Haskell при помощи параметрических модулей (вот пост про соответствие между ними).

Вот «иерархия» модулей, расширяющих функтор до монады. Полезные комментарии к соответствующим классам Haskell есть в статье The Typeclassopedia из The Monad.Reader.

module type FunctorType =
sig
  type 'a t
  val map : ('a -> 'b) -> 'a t -> 'b t
end

module type PointedType =
sig
  include FunctorType
  val pure : 'a -> 'a t
end

module type ApplicativeType =
sig
  include PointedType
  val (<*>) : ('a -> 'b) t -> 'a t -> 'b t
end

module type MonadType =
sig
  include ApplicativeType
  val join : 'a t t -> 'a t
  val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
  val (>>) : 'a t -> 'b t -> 'b t
end

Здесь уже видно, что не всё получается как в Haskell. Сигнатуры модулей не позволяют привести значение терма по умолчанию.

Upd: Выложил полный исходник с примерами в pastebin.

Дальше пример с монадой Maybe…

Реклама

Written by vlan

2009-07-13 at 22:17

Опубликовано в Uncategorized

Tagged with , , , ,

Команда spb-archlinux на ICFPC 2009

13 комментариев

Никак не возьму в привычку чаще писать в блог. Но на этот раз повод действительно есть. Наша команда spb-archlinux принимала участие в программерском конкурсе ICFP Contest 2009 :)

Ниже рассказ об этом. Если вкратце, было весело! :)

Upd: В финальной таблице результатов мы заняли 95 место с 1826 очками.

Читать далее…

Written by vlan

2009-07-02 at 01:41

Опубликовано в Uncategorized

Tagged with , , , , , ,

Доклад об акторах

leave a comment »

Выступил с докладом на встрече SPbHUG 2008-10-24. Доклад был о модели акторов (actor model), удобстве акторов для программирования сетевых протоколов и примерах реализации акторов на Haskell, Python и Scheme. Слайды доклада об акторах лежат в вики SPbHUG.

Written by vlan

2008-11-06 at 15:48

Опубликовано в Uncategorized

Tagged with , , , , , , , ,

Литературный Python

5 комментариев

Под впечатлением Literate Haskell, я решил сделать что-то подобное для Python, чтобы было проще писать заметки в блоге. Пишу я редко, поэтому это было стимулом повозиться с блогом и написать что-нибудь.

Literate programming, литературное программирование — идея, придуманная и реализованная Дональном Кнутом в 1980-x для C и TEX:

Главная идея — рассматривать программу как средство взаимодействия между людьми, а не набор инструкций для компьютера.

Идею Кнута реализовали и в Haskell. Там поддерживается два стиля разделения кода и текста: добавление к строкам кода > (птичий стиль) или окружение кода парами \begin{code} и \end{code} (стиль LATEX). К тому же для Haskell часто применяют преобразователи кода из ASCII в расширенный математический набор символов, из-за чего код выглядит неприлично красивым :)

Для меня целью было получить хотя бы некоторые преимущества литературного программирования для Python. Я хотел иметь возможность запускать код, который я пишу в заметках для блогов. Раньше приходилось писать его в отдельном исходнике, затем перенося в заметку, либо полагаться на то, что код написан правильно и запускать его не нужно.

Когда я пишу заметки в блог, я размечаю текст при помощи XHTML или (намного чаще) Markdown. В последнем случае при помощи утилиты markdown я перевожу разметку в XHTML. Для автоматизации я использую GNU make: здесь нужен совсем простой makefile. Для себя я придумал довольно простой способ написания текста в Literate Python. Для разделения кода я использовал птичий стиль Haskell. Исходный файл *.lpy автоматически преобразуется при помощи make в два файла: обычный исходник *.py и файл *.xhtml.

Читать далее…

Written by vlan

2008-05-18 at 22:17

Опубликовано в Uncategorized

Tagged with , , , , , , ,