
Hello Wolfgang, Saturday, February 11, 2006, 3:17:12 PM, you wrote:
each and every monadic operation is a function!
WJ> What do you mean with "monadic operatation"? (>>=), (>>) and return are, of WJ> course, functions but an I/O action like getChar is *not* a function. Also a WJ> list is not a function but a value of the list monad.
type "IO a" is really "RealWorld -> (RealWorld,a)"
WJ> This representation is just there to help people understand what I/O is but WJ> actually, IO a is a type which is not implementable in ordinary Haskell and WJ> therefore cannot be a function. In addition, RealWorld -> (RealWorld,a) as WJ> an explanation of what IO a is has its limitations. If we run an I/O action, WJ> we aren't just interested in the final state but also in intermediate states. {putStr "a"} is a function, which receives previous world state and returns updated world state where "a" is written to the terminal. it's an _essential_ part of monadic way to I/O in the list comprehension, filters also use value of current list element. if filter don't use this element value, it can be computed prior to comprehesion to speed the things up
and the same for any other monad. concept of the monad by itself means carrying "hidden" state from one monadic operation to the next.
WJ> That's too specific. A list, for example, doesn't have to do anything with WJ> state and [a] is not represented as a function. -- Best regards, Bulat mailto:bulatz@HotPOP.com