Tomasz Zielonka wrote:
On Thu, Nov 25, 2004 at 07:52:43PM +0100, Lennart Augustsson wrote:
As I'm sure you have gathered from all the answers you can't have the
latter and keep Haskell pure. But there is an interesting alternative
(at least theoretically). You could have a function like
mkCatchJust :: IO ((Exception -> Maybe b) -> (c -> a) -> c -> (b -> a) -> a)
How is that different from this?
mkReadFile :: IO (FilePath -> String)
This is wrong. Even if I get a function as a result of an IO computation, I
expect that function to be pure.
BTW, I couldn't stop myself. Here's (a simple version of) mkReadFile:
mkReadFile :: IO (FilePath -> String)
mkReadFile = do
names <- traverse "/"
files <- mapM readFile names
let find name =
case lookup name (zip names files) of
Just file -> file
Nothing -> error "file not found"
return find
traverse :: FilePath -> IO [FilePath]
traverse d =
do
fs <- getDirectoryContents d
let fs' = map ((d ++ "/") ++) (fs \\ [".", ".."])
fss <- mapM traverse fs'
return (concat fss)
`catch` \ e ->
return [d]
I don't really recommend it being used. :)
-- Lennart
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell