On 12/12/06, Conal Elliott <[EMAIL PROTECTED]> wrote:
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.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe