Monad of no `return` Proposal (MRP): Moving `return` out of `Monad`

Mario Blažević mblazevic at stilo.com
Fri Oct 2 21:55:53 UTC 2015


On 15-10-02 04:50 PM, Bardur Arantsson wrote:
> On 10/02/2015 12:09 PM, Henrik Nilsson wrote:
>> Hi all,
>>
> [--snip--]
>> So from that
>> perspective, using the applicative operators directly,
>> without any syntactic sugar, actually amounts to a much
>> more transparent and honest syntax, even if a bit more
>> verbose in some cases.
>
> "Verbose" is the understatement of the year. There's a lot of code where
> ApplicativeDo makes the difference between "readable" and "unreadable".
> Like it or not, but programmers are used to *naming things* (even
> locally) and using those local names to refer to things.

	Naming of applicative sub-expressions is perfectly doable without 
reaching for any syntactic sugar. An applicative do like

	do a <- f long expression
            b <- g long expression
            return (h a b)

would be equivalent to

         let a = f long expression
             b = g long expression
          in f <$> a <*> b

	The benefits of applicative do, if I understand the motivation 
correctly, are not so much to help in writing new code intended to be 
applicative. Instead it lets the programmer write in monadic style and 
at the same time enables the compiler to convert the code to applicative 
style if possible. This has the potential to automatically improve 
performance of legacy Haskell codebase, as well as any new 
beginner-friendly code that relies on syntactic sugar.

	As for the issue of textbooks, I assume they describe Haskell 98. Until 
Haskell compilers start defaulting to Haskell 2020 there shouldn't be 
any issue.




More information about the Libraries mailing list