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 mech...@botik.ru Regards, ------ Sergei mech...@botik.ru _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe