Re: [Haskell-cafe] Proposal: new function for lifting

2013-09-29 Thread Bas van Dijk
On 27 September 2013 21:51, Thiago Negri  wrote:
> Stop lifting, start using shinny operators like this one:
>
> (^$) :: Monad m => m a -> (a -> b -> c) -> m b -> m c
> (^$) = flip liftM2

Note that something like this is already provided by the
InfixApplicative library:

http://hackage.haskell.org/package/InfixApplicative
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Proposal: new function for lifting

2013-09-28 Thread Marc Ziegert
this is a funny trick, and it looks saner than the more general <$> <*> 
combinators.
i see many situations where i could use that to lift my own combinators,
or to replace the backticks (``) to lift the infix function.

thx
- marc


Gesendet: Freitag, 27. September 2013 um 21:51 Uhr
Von: "Thiago Negri" 
An: Haskell-Cafe 
Betreff: [Haskell-cafe] Proposal: new function for lifting

Everybody is claiming that using lift is a bad thing.
So, I come to remedy this problem.
 

Stop lifting, start using shinny operators like this one:
 

    (^$) :: Monad m => m a -> (a -> b -> c) -> m b -> m c
    (^$) = flip liftM2
 
Then you can do wonderful stuff and you will never read the four-letter word in 
your code again:
 
    \> Just 42 ^$(+)$ Nothing
    Nothing
    \> Just 10 ^$(+)$ Just 20
    Just 30
    \> let add = (+)
    \> Just 30 ^$ add $ Just 12
    Just 42
 
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Proposal: new function for lifting

2013-09-27 Thread Nick Vanderweit
Sorry for sending this twice; I didn't reply to the list initially.

I thought people [1] were generally talking about lift from
Control.Monad.Trans:

class MonadTrans t where
lift :: Monad m => m a -> t m a

The idea being that lifting through a monad stack feels tedious. The
proposed solution is to use instances to do the lifting for you, like in
mtl. So we've got instances like:

MonadState s m => MonadState s (ReaderT r m)

Which let you automatically lift get/put/modify up a stack, without doing
any work.

This is different from liftM*, which are about applying a pure function
to monadic arguments. This can be done quite nicely with (<$>) and (<*>)
from Data.Functor and Control.Applicative, respectively. Your first
example can be written:


(+) <$> (Just 42) <*> Nothing


Nick

[1]
http://blog.ezyang.com/2013/09/if-youre-using-lift-youre-doing-it-wrong-probably/



signature.asc
Description: OpenPGP digital signature
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Proposal: new function for lifting

2013-09-27 Thread Wvv
Which "lift"?
This one?

class MonadTrans t where
lift :: Monad m => m a -> t m a



--
View this message in context: 
http://haskell.1045720.n5.nabble.com/Proposal-new-function-for-lifting-tp5737189p5737196.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe