On Wed, 2005-07-20 at 00:21 +0200, yin wrote: > Dinh Tien Tuan Anh wrote: > > > > > Hi, > > Could anyone explain for me why its not possible to return a primitive > > type (such as Integer, String) while doing some IO actions ? > > > > e.g: foo :: IO() -> String > > > > What does it have to do with "lazy evalution" paradigm ? > > > In short, to not break functional aproach. Non-IO functions can't call > IO functions, because IO functions are evaluated every time you call them.
I prefer to say it another way. I think you asking for a function like this: f :: IO a -> a If so, with this you could write: someChar :: Handle -> Char someChar handle = f (hGetChar handle) where hGetChar :: Handle -> IO Char and Handle represents the interface to a file. This is a big problem for a purely functional language, because it means someChar is not a function! Given the same Handle argument, successive calls to someChar might return different results. Functions, by definition, are not allowed to have this kind of behaviour. Therefore f is not allowed. Cheers, Bernie. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe