[Haskell-cafe] Problems instancing a class

Juan Carlos Arevalo Baeza jcab.lists at JCABs-Rumblings.com
Fri Feb 17 13:09:54 EST 2006


   So, consider this code:

import Data.HashTable as HT

class MyClass a where
    htLookup :: a -> String -> IO String

type Context = HT.HashTable String String

instance MyClass Context where
    htLookup h var =
        do  result <- HT.lookup h var
            case result of
                Nothing -> return ""
                Just s -> return s

   This doesn't compile. GHC says:

Illegal instance declaration for `MyClass Context'
    (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 Context'

   If I use "data" instead of "type", it works:

data Context = C (HT.HashTable String String)

instance MyClass Context where
    htLookup (C h) var =
        do  result <- HT.lookup h var
            case result of
                Nothing -> return ""
                Just s -> return s

   Why? What's going on here?

JCAB



More information about the Haskell-Cafe mailing list