type equality test leads to a looping type checker
The following code (similar to one of HList’s generic type equality tests) causes GHC to loop forever (or at least very long) with GHC 6.8.0.20071020 on i386-unknown-mingw32 and GHC 6.8.0.20071019 on i386-unknown-linux:
{-# LANGUAGE
MultiParamTypeClasses,
FunctionalDependencies,
UndecidableInstances,
OverlappingInstances,
FlexibleInstances,
EmptyDataDecls #-}
data True
data False
class TypeEq type1 type2 result | type1 type2 -> result where
typeEq :: type1 -> type2 -> result
instance TypeEq soleType soleType True where
typeEq _ _ = undefined
instance (TypeCast False result) => TypeEq type1 type2 result where
typeEq _ _ = undefined
class TypeCast type1 type2 | type1 -> type2, type2 -> type1
instance TypeCast soleType soleType