Про IO и коиндукцию.

Mar 24, 2010 17:19

Как вы думаете, делать в неком (абстрактном) языке
всяческое IO, как экземпляр терминальной коалгебры
с очень таким странным "состоянием", это очень плохо?

Leave a comment

Comments 15

dmzlj March 24 2010, 14:54:31 UTC
Пару раз перечитал. Возникла мысль, примерно такого вида:

ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫыыыыыыыыыыыыыыыы

Reply

nivanych March 24 2010, 14:57:43 UTC
Это чо, значит, очень плохо? ;-)
Если надо, я могу уточнить.

Reply

dmzlj March 24 2010, 15:05:01 UTC
Лучше не надо. Многие знания --- многие печали. Я лучше пока continuation-based IO осознаю.

Reply

nivanych March 24 2010, 15:22:22 UTC
Ну да. Лучше спишь, и всётакое ;-)

Reply


deni_ok March 24 2010, 16:43:01 UTC
Не вижу, почему плохо. Всякие (потенциально бесконечные) streams как раз хорошо ложатся на. Но язык, боюсь, вызовет лёгкое неприятие у ширнармасс ;-)

Reply

nivanych March 24 2010, 17:42:20 UTC
Потенциально, одно нехорошее место,
это возможность использования IO-потока
в какой угодно функции, в то время,
как нечто, завёрнутое в монаду,
откуда угодно не попользуешь.

Reply


ex_juan_gan March 24 2010, 18:26:20 UTC
А вот нехило было бы какой-нибудь writeup на эту тему накатать. Я лично теорию-то как бы знаю, нарисовать формулы могу, но совершенно не ощущаю терминальных коалгебр почему-то. Хотя казалось бы, сопряженность же; где монада, там и комонада, ну и т.д.

Reply

nivanych March 24 2010, 19:06:12 UTC
После этих слов у меня уже просто никакого
выбора не остаётся, кроме как написать ;-)

Reply

wizzard0 March 26 2010, 06:52:56 UTC
угу. было бы полезно.

Reply


beroal March 30 2010, 14:49:48 UTC
Элемент носителя коалгебры можно копировать. То есть с помощью коалгебры можно описать автомат, но работать с внешним автоматом (то есть внешним миром) как с автоматом нельзя. И у коалгебры количество алгебраических операций фиксировано, а функции, работающие с IO в Haskell, можно добавлять.

Или ты имел в виду, что внешний мир будет работать с твоей программой как с автоматом?

Reply

nivanych March 30 2010, 15:15:58 UTC
Элемент носителя _терминальной_ коалгебры ( ... )

Reply

beroal March 30 2010, 16:49:23 UTC
Тут явно какое-то непонимание, так что надо определиться с терминами. Терминальная коалгебра строится по коалгебраической теории. Ещё есть коалгебраическая структура. Терминальная коалгебра является коалгебраической структурой. Что такое «экземпляр терминальной коалгебры» я вообще не понимаю. Терминальные коалгебры, будучи терминальными объектами, изоморфны. Под «состоянием» ты подразумеваешь элемент носителя коалгебры (я - да)?

Ну и доказательство того, что элементы носителя коалгебры нельзя копировать, остаётся под вопросом. Если носитель коалгебры соответствует типу в функциональном языке, то копировать значение этого типа можно.

Reply

nivanych March 30 2010, 17:08:24 UTC
Я имел ввиду конкретно корекурсию, то есть ( ... )

Reply


Leave a comment

Up