Strictifying monadic values, take 3

John Lato jwlato at gmail.com
Sat Apr 26 22:48:52 UTC 2014


+1 on <$!>

Neutral on the other.

John L.

On Apr 26, 2014 12:14 PM, "David Luposchainsky" <
dluposchainsky at googlemail.com> wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> (HTML-rendered version of the text below see [1])
>
>
> Strictifying Monadic values
> ===========================
>
> Half a year ago, Johan Tibell proposed adding a strict
> equivalent to fmap [2]. This discussion got lost in details,
> it was reopened, it ended in bikeshedding again. This is
> a third attempt to get this through, with individual
> options and no alternatives proposed, compiled from the
> two more popular responses in the other threads.
>
> Please do not propose alternative implementations here,
> we've been through this twice already. Vote ±1 on each
> point to show (dis)agreement. I think this functionality
> should be in the standard libraries in one way or
> another, regardless of how it's named in the end.
>
>
>
> 1. Add a strict version of <$>, named <$!>.
>
>   ```haskell
>   infixl 4 <$!>
>
>   (<$!>) :: Monad m => (a -> b) -> m a -> m b
>   f <$!> m = do x <- m
>                 return $! f x
>   ```
>
>   This is closely related to fmap in terms of functionality,
>   but requires a Monad constraint.
>
>   This would allow defining
>
>   ```haskell
>   seqM m = id <$!> m
>   ```
>
>   if such a function is needed.
>
>
>
> 2. Add a seqM function that evaluates the "contents" of a
>   monadic action to WHNF.
>
>   ```haskell
>   seqM :: Monad m => m a -> m a
>   seqM m = do x <- m
>               return $! x
>   ```
>
>   This is less close to fmap, but allows building other
>   strict operations (locally and as needed) based on it
>   easier, for example
>
>   ```haskell
>    f <$!>  x = seqM ( f <$>  x)
>   mf <*!> mx = seqM (mf <*> mx)
>   mf <*!  mx = seqM (mf <*  mx)
>   mf  *!> mx = seqM (mf  *> mx)
>   ```
>
>   If these operators then turn out to be used (and locally
>   reinvented) very often by different people, reconsider
>   adding them as well.
>
>
>
> A voting period of two weeks (until 10-05-2014) should be
> sufficient to allow everyone to join in.
>
>
> Greetings,
> David
>
>
> Links:
> [1]: https://github.com/quchen/articles/blob/master/seqm_proposal.md
> [2]: http://www.haskell.org/pipermail/libraries/2013-November/021728.html
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.14 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iQEcBAEBAgAGBQJTXAWmAAoJELrQsaT5WQUs9GgH/3Vr2nDUDyX7pU24Vs0Dfq6e
> 43xcgY5ZBXCk/v/L6b14DA2br+jc32GkAnwkoWvJYQDNc6E6QwdPUnyaFpNPthA3
> 7NDcuGukJPzpkkA/YCVqq4Yu6jIwjcVm/xMQaRmASWMnlJxEypFuuMirWVUgg+ED
> Zl9x2VUoFUoRq6TpE1TGcOS0eoevqvu7LDdTJkGEC7wNxZOD4a2hjyiv90e2LmYL
> mP0pPKVj2NfSjIfDa/q+ONIHN+hrQqriku9OJSGU8UVxOfAvi86W42xsFV6fNdVE
> OKc/TTKM4V23G7qw3Dpz1EGnXqqLdYlv1ck2EF05tmSOjJ6Bx2lAUBypRyjX6IA=
> =+wNo
> -----END PGP SIGNATURE-----
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140426/25f0a7c1/attachment.html>


More information about the Libraries mailing list