
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:
http://hackage.haskell.org/trac/haskell-prime/wiki/FlexibleInstances
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: http://www.haskell.org//pipermail/haskell-prime/2006-February/000609.html message contains a detailed explanation. Ben