[Haskell-cafe] Name that function =)

Louis J Scoras louis.j.scoras at gmail.com
Tue Dec 12 12:53:33 EST 2006

On 12/12/06, Conal Elliott <conal at conal.net> 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,


More information about the Haskell-Cafe mailing list