?

Log in

No account? Create an account
Применение комонад на практике - Лямбда - функциональное программирование [entries|archive|friends|userinfo]
Лямбда - функциональное программирование

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Применение комонад на практике [Oct. 31st, 2011|04:30 pm]
Лямбда - функциональное программирование

ru_lambda

[pod_baobabom]
Всем привет.

Возник, возможно, тривиальный вопрос. Как известно (в частности, из статьи Уодлера "The marriage of effects and monads"), любую разумную систему типов с эффектами (ну или *-passing style) можно транслировать в эквивалентную монадическую систему типов, которая тривиальным образом выражается в виде instance соответсвующей монады, скажем, в Haskell. Примером тому служит region calculus.

При этом, в другой известной статье, "Implicit Parameters: Dynamic Scoping with Static Types", упоминается использование комонад как ограничений на environment, в котором производится вычисление. Другими словами, система типов с комонадами может, теоретически, накладывать ограничения на контекст, в котором типизируется тот или иной терм.

Интересна практическая сторона вопроса. Были ли попытки описать что-нибудь типа co-unit и co-bind в общем случае? Сразу оговорюсь, что частных случаев полно - взять хотя бы популярные нынче системы типов для secure information flow.

Заранее спасибо.


Upd: Кажется, нашёл то, что требовалось, с примерами: Codata and Comonads in Haskell. Richard B. Kieburtz.
linkReply

Comments:
(Deleted comment)
[User Picture]From: kodt_rsdn
2011-10-31 06:04 pm (UTC)

Re: Off-topic

Наверное, кто первый встал (haskell с его IO), того и тапки.
Удобно же, когда в языке поддерживается одна система вывода (типов), а не две (типов и отдельно - чистоты/спецэффектов).
(Reply) (Parent) (Thread)
From: gds
2011-10-31 07:34 pm (UTC)

Re: Off-topic

а всякие расширения в х-е, которые опционально включаются, это третьи системы вывода?
(Reply) (Parent) (Thread)
[User Picture]From: nivanych
2011-11-01 02:18 am (UTC)

Re: Off-topic

Какие расширения?
Ты имеешь в виду всякие низкоуровневые, например, чтобы была возможность делать биндинги к сишечке?
(Reply) (Parent) (Thread)
From: gds
2011-11-01 05:24 am (UTC)

Re: Off-topic

не, я про эти: http://hackage.haskell.org/trac/haskell-prime/wiki/HaskellExtensions -- порой ощутимо меняют типизацию и возможности.
(Reply) (Parent) (Thread)
[User Picture]From: nivanych
2011-11-01 05:35 am (UTC)

Re: Off-topic

Ну так это не третья система, а расширения.
Во многих языках есть расширения.
(Reply) (Parent) (Thread)
(Deleted comment)
[User Picture]From: nponeccop
2011-10-31 07:27 pm (UTC)

Ещё больший оффтопик

А как вообще вычисляется main = print "foo" >> print "bar"? Ну >> можно рассахарить и получить print "foo" >>= \_ -> print "bar", а дальше? Какой следующий редекс? Когда и кем вызывается функция ОС, выполняющая печать?
(Reply) (Parent) (Thread)
[User Picture]From: lomeo
2011-10-31 08:48 pm (UTC)

Re: Ещё больший оффтопик

Надо смотреть конкретную реализацию >> и IO.
(Reply) (Parent) (Thread)
From: fuckind3r
2011-11-01 05:58 am (UTC)

Re: Ещё больший оффтопик

Дальше все зависит от реализации. Стандартом неопределено.
(Reply) (Parent) (Thread)
[User Picture]From: nivanych
2011-11-01 02:15 am (UTC)

Re: Off-topic

Потому, что люди ориентируются на практику.
А функционально чистых, да ещё и с нормальной редукцией, не типизированных просто нет, кроме глубоко экспериментальных и никому не известных.
Вот ты сделаешь что-то больше, чем эксперимент — посмотрим! ;-)
(Reply) (Parent) (Thread)