module Data.TypeEq ( TypeEq, typeEq ) where -- Data import Data.TypeLevel.Bool class TypeEq type1 type2 result | type1 type2 -> result where typeEq :: type1 -> type2 -> result instance TypeEq soleType soleType True where typeEq _ _ = true instance (TypeCast False result) => TypeEq type1 type2 result where typeEq _ _ = typeCast false class TypeCast type1 type2 | type1 -> type2, type2 -> type1 where typeCast :: type1 -> type2 instance (TypeCastHelper () type1 type2) => TypeCast type1 type2 where typeCast = typeCastHelper () class TypeCastHelper dummy type1 type2 | dummy type1 -> type2, dummy type2 -> type1 where typeCastHelper :: dummy -> type1 -> type2 instance (TypeCastHelperHelper dummy type1 type2) => TypeCastHelper dummy type1 type2 where typeCastHelper = typeCastHelperHelper class TypeCastHelperHelper dummy type1 type2 | dummy type1 -> type2, dummy type2 -> type1 where typeCastHelperHelper :: dummy -> type1 -> type2 instance TypeCastHelperHelper () soleType soleType where typeCastHelperHelper () value = value