On Fri, Nov 16, 2012 at 8:00 AM, Daryoush Mehrtash <dmehrtash@gmail.com> wrote:
Sorry wrong paste

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

It means that 2 has type a (which must be in the Num class), 3 has type (a -> t) (which also must be in the Num class), and the type of (3 2) is therefore t.
When you apply one expression to another, the first must have function type, and the second must have the type of the domain of the function, hence the a -> t and a.
Furthermore, the numeric literals are always interpreted as being in the Num class.
I haven't been able to find any good introduction to numeric literals and the Num class with quick search, so if anyone else on list can point us to one (if it exists) that would be great.
 


What does the type mean in plain english?

Daryoush

On Fri, Nov 16, 2012 at 12:00 AM, Daryoush Mehrtash <dmehrtash@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@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@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@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@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@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/