[Haskell-cafe] Problems instancing a class
benjamin.franksen at bessy.de
Fri Feb 17 16:20:42 EST 2006
On Friday 17 February 2006 21:03, Juan Carlos Arevalo Baeza wrote:
> What really got me is that if I don't use a type synonym:
> instance MyClass (HT.HashTable String String) where
> htLookup h var =
> do result <- HT.lookup h var
> case result of
> Nothing -> return ""
> Just s -> return s
> it still complains:
> Illegal instance declaration for `MyClass (HashTable String String)'
> (The instance type must be of form (T a b c)
> where T is not a synonym, and a,b,c are distinct type variables)
> In the instance declaration for `MyClass (HashTable String String)'
> even though the documentation in GHC states that HashTable is
> declared as "data".
(Guessing) Maybe because 'String' is not a type variable?
> How exactly is type undecidable if this is allowed? I found here:
> an example of a non-terminating instance:
> instance C b b => C (Maybe a) b
> I don't see how/where/when this would be non-terminating. I
> mean... if you now define an instance "C Int Int", then you actually
> also have "C (Maybe Int) Int", C (Maybe (Maybe Int)) Int" and so on,
> I can see that. But how exactly is that a problem? Can you show me a
> use of C that cannot work with that instance?
What is (or better: might be) non-terminating is the process (algorithm)
of /type inference/. This:
message contains a detailed explanation.
More information about the Haskell-Cafe