
Persuant to my previous question, I have made some progress, but there is something odd going on. Suppose we want to implement the following algorithm, which is a little simpler than the original problem: The user types the name of a file as input. Haskell then puts the text "it works" to that file. I tried this: import System.IO let openFileWrite name = openFile name WriteMode h :: IO Handle h <- fmap openFileWrite getLine -- you need to type in a file name This looks wrong, because h presumably needs to be a fixed Handle. Being an IO Handle seems to imply it is mutable. Haskell doesn't complain, though. We also have the problem of how we are going to use hPutStr to put a string to the file. We can't do hPutStr h "it works" because h doesn't have the right type. I tried getting around it by creating a function let put s h = hPutStr h s fmap (put "it works") h But that doesn't work, it says *** Exception: wow: openFile: resource busy (file is locked) I'm guessing what I've done is create a stream OUT OF the file handle, rather than FOR THE file handle. Urgh! Any ideas what the fix is?