[Haskell-cafe] FW: RE Monad Description For Imperative Programmer

Kim-Ee Yeoh a.biurvOir4 at asuhan.com
Wed Aug 8 09:32:58 EDT 2007

Claus Reinke wrote:
> there is usually a way to interpret monadic structures built in
> this way (a 'run' operation of some kind).

The "run" operation of type (m a -> a) is the (comonadic) coreturn. Many
monads are almost comonads too, for a meaning of "almost" to be made

Claus Reinke wrote:
>     - i/o: primitive monadic things are basic i/o operations, 
>         the 'run' operation is outside the language, applied to
>         'Main.main', and interprets (abstract) IO monad structures
>         sequentially, starting with the leftmost innermost i/o 
>         operation in the structure and applying the second
>         argument of (>>=) to the result of executing the first.

"Run" for IO monad is obviously unsafePerformIO :: IO a -> a.

Claus Reinke wrote:
>     - []: primitive monadic things are lists, the 'run' operation
>         is the identity, ie, the lists are directly exposed as data
>         structures, return creates a singleton list, (>>=) applies
>         its second argument to each element of its first argument
>         and concatenates the results (concatMap).

"Run" for [] is almost head :: [a] -> a. For the type of infinite streams,
the research community's comonad de rigeur, coreturn _is_ h(ea)d.

Claus Reinke wrote:
>     - State: primitive monadic things are operations on a state
>         type, returning a result and a state; return returns its 
>         parameter, passing its input state unchanged, (>>=) applies 
>         its first parameter to the input state, applies its second 
>         parameter to the result value and result state of the first. 
>         'run' is runState and applies a (possibly) complex monadic 
>         thing to an input state, returning a result and a (modified) 
>         state.

The State monad is almost (there's that word again!) like the Context
comonad. And the Context comonad is a comonadification of the suboptimally
named Reader monad, a comonadification that wants to be made precise.

In fact, there's another comonad that solves the analogical equation:
comonad x is to monad State as comonad Context is to monad Reader. Any
takers on calling x the Costate comonad and Reader the Ntext monad?

View this message in context: http://www.nabble.com/FW%3A-RE-Monad-Description-For-Imperative-Programmer-tf4200420.html#a12053227
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

More information about the Haskell-Cafe mailing list