Skip to content

GHC 6.8.* doesn't recognize type variables

The module

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{- # LANGUAGE FlexibleInstances # -}
module Leandro where

data Abb a b = Branch a b (Abb a b) (Abb a b) | Leaf

data ListAssoc a b = Node a b (ListAssoc a b) | Empty

class Container c a b |c -> a, c -> b where
    empty :: c
    add :: c -> a -> b -> c
    search :: c -> a -> Maybe b
    del :: c -> a -> c
    toListPair :: c -> [(a,b)]

instance (Ord a) => Container (Abb a b) a b where
    empty = Leaf
    add Leaf x y = Branch x y Leaf Leaf
    add arb@(Branch ni nd ri rd) x y
        |x == ni = arb
        |x > ni = Branch ni nd ri (add rd x y)
        |otherwise = Branch ni nd (add ri x y) rd
    search Leaf x = Nothing
    search (Branch ni nd ri rd) x
        |x == ni = Just nd
        |x > ni = search rd x
        |x < ni = search ri x

triggers the following error in ghci (6.8.1 and 6.8.2):

dafis@linux:~/Documents/haskell/move> ghci Leandro
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
[1 of 1] Compiling Leandro          ( Leandro.hs, interpreted )

Leandro.hs:17:0:
    Illegal instance declaration for `Container (Abb a b) a b'
        (All instance types must be of the form (T a1 ... an)
         where a1 ... an are distinct type *variables*
         Use -XFlexibleInstances if you want to disable this.)
    In the instance declaration for `Container (Abb a b) a b'
Failed, modules loaded: none.

To the best of my knowledge, a and b in 'instance Container (Abb a b) a b where' are distinct type variables and neither hugs nor ghci-6.6.1 complain. Converting the third line to a language pragma makes the code acceptable to 6.8.*.

Trac metadata
Trac field Value
Version 6.8.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information