
There's no such thing as a fixed arity of a function in Haskell. The type of id is
id :: a -> a
If you instantiate "a" with "b -> c", then it becomes
id :: (b -> c) -> b -> c
and it suddenly takes two arguments. In fact, it then behaves like function application. Try
id not True
or
not `id` True
and you'll see that it works as if you had used function application or $ instead. So ap lifts function application, and if it helps, you can think of it as instead being defined as
ap = liftM2 ($)
Cheers,
Andres
On Thu, Mar 26, 2015 at 9:18 PM, martin
Hello all,
can someone explain
ap = liftM2 id
to me? liftM2 wants a binary funcation
liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
but id is unary. How does this work? _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
-- Andres Löh, Haskell Consultant Well-Typed LLP, http://www.well-typed.com Registered in England & Wales, OC335890 250 Ice Wharf, 17 New Wharf Road, London N1 9RF, England