[Haskell-cafe] nested function application question

David Menendez dave at zednenem.com
Mon Jan 5 15:33:02 EST 2009


On Mon, Jan 5, 2009 at 3:16 PM, Brandon S. Allbery KF8NH
<allbery at ece.cmu.edu> wrote:
> On 2009 Jan 5, at 13:57, David Menendez wrote:
>>
>> 2009/1/5 Ross Mellgren <rmm-haskell at z.odi.ac>:
>>>
>>> If for some reason you absolutely need to avoid parentheses (mostly as a
>>> thought exercise, I guess), you'd have to have a flipped version of
>>> intercalate:
>>
>> Or a version of ($) that associates differently.
>>
>> infixl 0 $$
>>
>> f $$ x = f x
>>
>> *Main Data.ByteString> :t \x y z -> intercalate $$ intercalate x y $$ z
>> \x y z -> intercalate $$ intercalate x y $$ z :: ByteString
>>                                                -> [ByteString]
>>                                                -> [ByteString]
>>                                                -> ByteString
>
>
> ...at which point we're reinventing Applicative, no?

Is "const" a reinvention of "return"?

You could write the above code with (<*>), but you'd need to convert
back and forth from Identity in order to get the proper Applicative
instance.

    runIdentity $ Identity B.intercalate <*> Identity (B.intercalate x
y) <*> Identity z

At that point, you might as well save the noise and write,

    B.intercalate (B.intercalate x y) z

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list