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
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to