
As Divyanshu said, (Num a, Ord a) => [a] is the type of a value, not of a function. [a] just means "A list of values having some type (could be anything, really)". (Num a, Ord a) => means "Whatever type *a* has, that type is a member of the Num typeclass and of the Ord typeclass" -- these are called type constraints. *a* has to be a member of the Ord typeclass (the class of types that can be compared in value -- either equal, smaller than, or less than) because you've used a function like (<=) or (>) in your quicksort function that makes those sorts of comparisons. *a* has to be a member of the Num typeclass because you've used number literals in your list. These could be Ints, Integers, Floats... but ghci has no way of knowing which one. If you do this:
let a = 3 :: Int :t quicksort [a,2,1,-10]
You'll get back this result:
quicksort [a,2,1,-10] :: [Int]
In this case ghci now knows your talking about a specific type (Int), so it
doesn't need to specify type constraints.
On Sat, Dec 8, 2012 at 8:11 PM, Trung Quang Nguyen
Hi there,
I have a quickSort implementation, then I try to use :t in ghci to inspect what type I receive. I got this.
*Main> :t quickSort "Hello the world" quickSort "Hello the world" :: [Char] *Main> :t quickSort [3,2, 1,-10] quickSort [3,2, 1,-10] :: (Num a, Ord a) => [a]
The first one looks like :t return type of output of quickSort [Char]
The second one looks like :t return the type of function (Num a, Ord a) => [a]
Anybody know why this happens? When we will receive type of output, or type of function? And why (Num a, Ord a) => [a], even quickSort doesn't have explicit type, so this type comes from input type and type of function is defined in runtime?
Thanks a lot!
Cheers, Trung
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners