{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, TypeSynonymInstances #-} -- This one made GHC 6.4 loop because Unify.unify -- didn't deal correctly with unifying -- a :=: Foo a -- where -- type Foo a = a module ShouldSucceed where newtype PRef a = PRef a type Drop1 a = a class Ref a r | a -> r where readRef :: a -> r instance Ref (PRef a) (Drop1 a) where readRef (PRef v) = v