ketil at malde.org
Mon Jan 17 14:04:56 CET 2011
Henning Thielemann <lemming at henning-thielemann.de> writes:
>> class PERSON a b where
>> p1 :: a
>> name :: a -> b
A multi-parameter typeclass is a relation over types...
>> instance PERSON Int String where
>> p1 = 1
>> name p1 = "john"
^--note that this is just an unused paramter,
it is clearer to specify 'name _ = "john"'
...so this instance gives the PERSON relation for Int and String.
So other PERSONs would have different types, say:
instance PERSON Double Int where
p1 = 3.14
name = 200
Does that make sense? It looks a bit strange to me.
> The problem is certainly, that a Haskell interpreter has no way to
> infer types, thus you have to annotate type of both argument and
> result of 'name', and type annotation for 'p1' is not possible at all,
> because 'b' does not occur in its type. You have to write
> name (12::Int) :: String
And (correct me if I'm wrong) there's no way to do that for p1, since
there is no way to specify which type 'b' you want. You could have
instance PERSON Int String where
p1 = 1
name = "john"
instance PERSON Int Double where
p1 = 24
name = 3.14
then the system would have no way to figure out which value you want
even if you specify (p1::Int).
Are you sure you didn't want:
data Person = P Int String
If I haven't seen further, it is by standing in the footprints of giants
More information about the Haskell-Cafe