
On 12/12/06, Conal Elliott
Try foo = liftM2, and check out the recent haskell thread "Cannot understand liftM2".
That's actually what I reached for first. The problem is that the arguments aren't monads: *Main> :t (uncurry renameFile) (uncurry renameFile) :: (FilePath, FilePath) -> IO () *Main> :t putDirs putDirs :: (String, String) -> IO () and liftM2 works on monadic arguments: liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r I need to somehow get the mapped elements to be applied to each of the arguments before they can be combined. Substituting liftM2 for (foo (>>)) yields: No instance for (Monad ((->) (String, String))) arising from use of `liftM2' at DCFiles.hs:30:9-14 Probable fix: add an instance declaration for (Monad ((->) (String, String))) The foo function does the job, so I assume that I'm trying to solve a different problem than liftM. I wouldn't be surprised if I was wrong, however. -- Lou.