[Haskell-cafe] need help with understanding expression

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


Sorry wrong paste

Prelude> :t 3 2
3 2 :: (Num a, Num (a -> t)) => t


What does the type mean in plain english?

Daryoush

On Fri, Nov 16, 2012 at 12:00 AM, Daryoush Mehrtash <dmehrtash at gmail.com>wrote:

> 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/
>>>>>
>>>>> _______________________________________________
>>>>> Haskell-Cafe mailing list
>>>>> Haskell-Cafe at haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> 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...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20121116/45f37647/attachment.htm>


More information about the Haskell-Cafe mailing list