Am 29.11.2011 um 09:16 schrieb Martin DeMello: > I have the following functions: > > makePair :: (String, String) -> IO PairBox > > parseFile :: String -> [(String, String)] > > importFile :: Editor -> String -> IO () > importFile ed path = do > s <- readFile path > ps <- mapM (\x -> makePair (x, "")) (lines s) > es <- return $ V.fromList ps > writeIORef ed es > > loadFile :: Editor -> String -> IO () > loadFile ed path = do > s <- readFile path > ps <- mapM makePair (parseFile s) > es <- return $ V.fromList ps > writeIORef ed es > > The problem is that loadFile and importFile are so similar it seems a > shame not to combine them somehow, but anything I can think of doing > leaves the code looking more rather than less messy. Any nice ideas?
fromRawFile, fromSavedFile :: String -> IO [PairBox] fromRawFile = mapM (\x -> makePair (x, "")) . lines fromSavedFile = mapM makePair . parseFile setEditor :: Editor -> [PairBox] -> IO () setEditor ed = writeIORef ed . V.fromList importFile, loadFile :: Editor -> String -> IO () importFile ed = readfile >=> fromRawFile >=> setEditor loadFile ed = readfile >=> fromSavedFile >=> setEditor _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe