# [Haskell-cafe] need help with understanding expression

Daryoush Mehrtash dmehrtash at gmail.com
Fri Nov 16 08:46:40 CET 2012

```I see the point with :t (.)  that

max.(+1) 2 2

is the same as

max. 3 2

Which is not what I want.

But I have no idea what the type signature of this expression mean now

Prelude> :t max. 3 2
max. 3 2 :: (Ord b, Num a1, Num (a1 -> a -> b)) => a -> b -> b

Any idea?

Daryoush

On Thu, Nov 15, 2012 at 11:19 PM, Ramana Kumar <Ramana.Kumar at cl.cam.ac.uk>wrote:

> Hi Daryoush,
>
> I recommend you try these experiments first, and then reply back if you're
> still confused.
>
> :t max
>
> :t (+1)
>
> :t max . (+1)
>
> :t (+1) 2
>
> :t (.)
>
>
> On Fri, Nov 16, 2012 at 7:10 AM, Daryoush Mehrtash <dmehrtash at gmail.com>wrote:
>
>> I am having hard time understanding how removing the  outer parenthesis in
>>
>> (max.(+1)) 2 2
>>
>> to
>>
>> max.(+1) 2 2
>>
>> changes the meaning of expression.
>>
>> My expectation was that "max.(+1) takes two numbers and returns the max
>> as defined in the type:
>>
>> :t max.(+1)
>> max.(+1) :: (Ord b, Num b) => b -> b -> b
>>
>>
>>
>> With parenthesis it does what I expect it to:
>>
>>
>> Prelude> :t (max.(+1)) 2 2
>> (max.(+1)) 2 2 :: (Ord b, Num b) => b
>> Prelude>  (max.(+1)) 2 2
>> 3
>>
>>
>> But if I remove the parenthesis I get a beast that I have no idea what
>> its type signature mean any more
>>
>> Prelude> :t (max.(+1)) 2 2
>> (max.(+1)) 2 2 :: (Ord b, Num b) => b
>> Prelude> :t max.(+1) 2 2
>> max.(+1) 2 2 :: (Ord b, Num a1, Num (a1 -> a -> b)) => a -> b -> b
>>
>>
>> How did removal of parenthesis changed the meaning?      How do you
>> interpret the type:  "(Ord b, Num a1, Num (a1 -> a -> b)) => a -> b -> b"?
>>
>> Thanks
>>
>>
>>
>> --
>> Daryoush
>>
>> Weblog:  http://onfp.blogspot.com/
>>
>> _______________________________________________
>>
>>
>

--
Daryoush

Weblog:  http://onfp.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...