module Data.TypeEq (
TypeEq,
typeEq
) where
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