On Thu, Feb 5, 2009 at 9:53 AM, Gleb Alexeyev
<gleb.alexeev@gmail.com> wrote:
Let's imagine that IO datatype is defined thus:
>{-# LANGUAGE GADTs #-}
>{-# LANGUAGE NoImplicitPrelude #-}
>import Prelude(Monad, Char)
>data IO a where
> GetChar :: IO Char
> Bind :: IO a -> (a -> IO b) -> IO b
>getChar = GetChar
>(>>=) = Bind
It is perfectly possible to construct IO actions as values of this data type and execute them by some function evalIO :: IO -> Prelude.IO with the obvious definition. Now the question arises: do you think
getChar >>= \x -> getChar would be optimized to getChar by compiler?
I must be misunderstanding something. I don't know if it would be optimized out, but I see no reason why it couldn't be. There's no data dependency, right?