[Haskell-cafe] need help with understanding expression

Daryoush Mehrtash dmehrtash at gmail.com
Fri Nov 16 09:00:13 CET 2012

Yes, same problem, and again I have no idea how to read the type

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

What does the type mean in plain english?

Daryoush

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

> Another experiment may be revealing:
>
> :t 3 2
>
>
>
> On Fri, Nov 16, 2012 at 7:46 AM, Daryoush Mehrtash <dmehrtash at gmail.com>wrote:
>
>> 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/
>>
>
>

--
Daryoush

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