Minoru 01.08.2011 17:08 netbook

До собственного туториала по монадам мне ещё расти и расти, а пока я решил поделиться прозрением, снизошедшим на меня по мере чтения нескольких глав «Learn You a Haskell for Great Good!»
В общем, оказалось, что пока я продирался сквозь «Real World Haskell» и пытался понять, как же на двух нещасных функциях — return и bind — можно в функционально чистом языке выполнять impure (так и хочется сказать «нечистый» :) код, я совершенно потерял общую картину. А на самом деле всё не так уж сложно.
Есть типы данных, как стандартные, так и пользовательские, определяемые с помощью ключевых слова data, type и newtype. Есть функции, с этими типами данных работающие.
Есть typeclasses, определяющие интерфейс (набор функций), который должны реализовывать все instances данного typeclass. Примеры: Eq (определяющий == и /=), Ord (min, max, <, <=, >=, > и т.п.) и, внезапно, Monad, определяющий те самые >>= и return. И всё, вот вам все монады.
То есть тайпклассы служат только для того, чтобы показать, что над определённым типом данных можно выполнять определённый набор функций. И так как монады — всего лишь ещё один typeclass, и ничего особенного в них нет.

Остальсь только выяснить, как же реализуется I/O и прочие сайд-эффекты :)

1. Minoru 01.08.2011 17:10 netbook

s/нещасных/несчастных/ >_<

2. jtootf 01.08.2011 17:30 galois

IO реализуется в IO; один из вариантов реализации — ST, в котором состоянием протаскивается RealWorld. но вообще монада IO в GHC — не лучший объект для изучения самой идеи

Do you really want to delete ?