Applicative Comprehensions

Oleg Grenrus oleg.grenrus at iki.fi
Mon Oct 12 09:17:36 UTC 2015


Paralell comprehension syntax will be confusing.

If user have both MonadComprehensions and ApplicativeDo enabled, it makes total sense to desugar monad comprehensions into Applicative expression when it’s possible, and into Monadic otherwise. I’m actually a bit surprised if it’s not already a case.

- Oleg

> On 12 Oct 2015, at 10:14, Roman Cheplyaka <roma at ro-che.info> wrote:
> 
> I like this idea because having the pure function call at the beginning (rather than at the end, as with do-notation) is more consistent with the original <$>,<*>-notation.
> 
> It only slightly bothers me that the bracket notation in this form has nothing to do with lists, so that may be a bit confusing. But this is already true for monad comprehensions.
> 
> It might make more sense to reuse the parallel list comprehension syntax
> (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/syntax-extns.html#parallel-list-comprehensions),
> as applicatives are "parallel". So, [ i + 2*j | i <- rows | j <- cols ].
> 
> On 10/12/2015 11:09 AM, David A Roberts wrote:
>> Hi,
>> 
>> I raised this question on #haskell, and was advised that this was
>> probably the best place to discuss.
>> 
>> I see that Applicative Do is scheduled for GHC 8.0 [1], and was hoping
>> that this might also enable support for Applicative Comprehensions [2].
>> Is this likely to be the case? If not, would it be difficult to extend
>> the support for Applicative Do to also handle comprehensions? I'm
>> willing to submit patches if necessary, but I'm not at all familiar with
>> GHC internals, so would need some guidance.
>> 
>> I understand that comprehensions tend not to be used much in idiomatic
>> Haskell, but I find them to be useful for implementing DSLs, so would
>> really like to see this be supported. For example, a matrix could be
>> written in a familiar notation:
>> 
>>> [ i + 2*j | i <- rows, j <- cols ]
>> 
>> which is a little more readable (to those not familiar with Haskell) than
>> 
>>> (\i j -> i + 2*j) <$> row <*> cols
>> 
>> or
>> 
>>> do { i <- rows; j <- cols; return (i + 2*j) }
>> 
>> [1] https://ghc.haskell.org/trac/ghc/wiki/Status/GHC-8.0.1#LandedinHEAD
>> [2]
>> https://ghc.haskell.org/trac/ghc/wiki/GeneralizedMonadComprehensions#Applicativefunctor
>> 
>> --
>> David A Roberts
>> https://davidar.io
>> 
>> 
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>> 
> 
> 
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20151012/b35e8300/attachment.sig>


More information about the ghc-devs mailing list