whenJust / forM_ (was Re: Proposal: Add isLeft/isRight to Data.Either)

Andreas Abel andreas.abel at ifi.lmu.de
Tue Dec 11 14:08:47 CET 2012


On 10.12.12 11:43 AM, Andreas Abel wrote:
> On 10.12.12 4:42 AM, Conrad Parker wrote:
>> On 8 December 2012 02:38, Erik Hesselink <hesselink at gmail.com> wrote:
>>> On Friday, December 7, 2012, Thomas Schilling wrote:
>>>>
>>>> On 7 December 2012 09:25, Erik Hesselink <hesselink at gmail.com> wrote:
>>>>> There is no need to define whenJust, since it is just a specialization
>>>>> of forM_ from Data.Foldable.
>>>>
>>>> I don't know if that's such a good argument.  I prefer my code
>>>> readable -- too much abstraction can have a seriously bad effect on
>>>> that.  As a simple rule, if the user has to do type inference in their
>>>> head, readability suffers.
>>>>
>>>> In this case, "forM_" implies we're iterating over something container
>>>> like, "whenJust" means "I want to do something if this thing yielded a
>>>> result". It depends on the context whether a "Maybe" is behaving more
>>>> container-like or is indicating the presence of a result where there
>>>> may not have been one.
>>>
>>>
>>> I don't have this problem, but I guess that's just personal. But in
>>> general
>>> I'm not in favor of adding specialized versions of generalized
>>> functions.
>
> At least in my mind, there is a conceptual distinction between a
> conditional execution such as whenJust and an iteration such as forM_.
> But I guess I am not alone in favoring, say,
>
>    if (debugLevel >= 1) then print ("Bla")
>
> over
>
>    while (debugLevel >= 1) do print ("Bla")

What was I thinking... ??  Don't write emails when jet-lagged... ;-)

> So for purposes of program readability, whenJust has clearly a right of
> existence, even if it is just an alias for forM_.
>
>> indeed, and likewise we should get rid of
>>
>> Control.Monad.forM_ :: Monad m => [a] -> (a -> m b) -> m ()
>>
>> which is just the same specialization to lists (and likely the reason
>> that forM_ doesn't come to mind for other container types, as much as
>> I generally like Data.Foldable).
>
> This is a another issue, these special instances of mapM for lists are
> indeed annoying...
>
>> btw:
>>
>> $ git grep whenJust|wc -l
>> 40
>
> Cheers,
> Andreas
>

-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY

andreas.abel at ifi.lmu.de
http://www2.tcs.ifi.lmu.de/~abel/



More information about the Libraries mailing list