[Haskell-cafe] Re: Who is afraid of arrows,
was Re: ANNOUNCE: Haskell XML Toolbox Version 9.0.0
Heinrich Apfelmus
apfelmus at quantentunnel.de
Mon Oct 18 04:30:24 EDT 2010
C. McCann wrote:
> Heinrich Apfelmus wrote:
>>> Combined with >>= / >> you have multiple reading direction in the same
>>> expression, as in
>>>
>>> expression ( c . b . a ) `liftM` a1 >>= a2 >>= a3
>>> reading order 6 5 4 1 2 3
>>
>> That's why I'm usually using =<< instead of >>= .
>
> Does it bother you that (=<<) is defined to be infixr 1, while (<$>)
> and (<*>) are infixl 4? Or is that just me?
>
> For instance, I might write the above expression as something like:
>
> a3 =<< a2 =<< a . b . c <$> a1
>
> But this still seems awkward, because it mixes different fixities and
> I have to mentally regroup things when reading it. Right associativity
> here does make a certain amount of sense for monads, but
> left-associativity is consistent with plain function application and
> feels more natural to me.
Well, you can't give (=<<) left fixity because its type doesn't allow it.
(a3 =<< a2) =<< a1 -- ill-typed!
So, (=<<) is modeled after (:) , not after (<$>) .
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Haskell-Cafe
mailing list