
To my question about safety of
toA_IO = openFd "toA" WriteOnly Nothing defaultFileFlags fromA_IO = openFd "fromA" ReadOnly Nothing defaultFileFlags toA = unsafePerformIO toA_IO fromA = unsafePerformIO fromA_IO
axiomIO :: String -> IO String axiomIO str = do fdWrite toA str (str, _) <- fdRead fromA 64 return str
Jean-Marie Gaillourdet wrote on Jan 16, 2012
[..]
I'd say this use of unsafePerformIO is *not* safe. E.g. a Haskell compiler is allowed to evaluate the right hand side of toA and fromA multiple times. If you aren't 100% sure that it is ok to use unsafePerformIO, don't use it! [..]
For example, consider in the above context the program main = do (str1, _) <- fdRead fromA 64 (str2, _) <- fdRead fromA 64 putStr (str1 ++ str2) Is this possible that str1 and str2 are input from different file descriptors? Does this effect depend on in-lining of fromA_IO by the compiler ? Will {-# NOTINLINE "fromA_IO" #-} make it safe? Please, copy the respond to mechvel@botik.ru Regards, ------ Sergei mechvel@botik.ru