Как вы думаете, делать в неком (абстрактном) языке всяческое IO, как экземпляр терминальной коалгебры с очень таким странным "состоянием", это очень плохо?
Потенциально, одно нехорошее место, это возможность использования IO-потока в какой угодно функции, в то время, как нечто, завёрнутое в монаду, откуда угодно не попользуешь.
А вот нехило было бы какой-нибудь writeup на эту тему накатать. Я лично теорию-то как бы знаю, нарисовать формулы могу, но совершенно не ощущаю терминальных коалгебр почему-то. Хотя казалось бы, сопряженность же; где монада, там и комонада, ну и т.д.
Элемент носителя коалгебры можно копировать. То есть с помощью коалгебры можно описать автомат, но работать с внешним автоматом (то есть внешним миром) как с автоматом нельзя. И у коалгебры количество алгебраических операций фиксировано, а функции, работающие с IO в Haskell, можно добавлять.
Или ты имел в виду, что внешний мир будет работать с твоей программой как с автоматом?
Тут явно какое-то непонимание, так что надо определиться с терминами. Терминальная коалгебра строится по коалгебраической теории. Ещё есть коалгебраическая структура. Терминальная коалгебра является коалгебраической структурой. Что такое «экземпляр терминальной коалгебры» я вообще не понимаю. Терминальные коалгебры, будучи терминальными объектами, изоморфны. Под «состоянием» ты подразумеваешь элемент носителя коалгебры (я - да)?
Ну и доказательство того, что элементы носителя коалгебры нельзя копировать, остаётся под вопросом. Если носитель коалгебры соответствует типу в функциональном языке, то копировать значение этого типа можно.
Comments 15
ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫыыыыыыыыыыыыыыыы
Reply
Если надо, я могу уточнить.
Reply
Reply
Reply
Reply
это возможность использования IO-потока
в какой угодно функции, в то время,
как нечто, завёрнутое в монаду,
откуда угодно не попользуешь.
Reply
Reply
выбора не остаётся, кроме как написать ;-)
Reply
Reply
Или ты имел в виду, что внешний мир будет работать с твоей программой как с автоматом?
Reply
Reply
Ну и доказательство того, что элементы носителя коалгебры нельзя копировать, остаётся под вопросом. Если носитель коалгебры соответствует типу в функциональном языке, то копировать значение этого типа можно.
Reply
Reply
Leave a comment