Safe Haskell | None |
---|---|

Language | GHC2021 |

Type equality and comparison

## Synopsis

- eqType :: HasCallStack => Type -> Type -> Bool
- eqTypeIgnoringMultiplicity :: Type -> Type -> Bool
- eqTypeX :: HasCallStack => RnEnv2 -> Type -> Type -> Bool
- eqTypes :: [Type] -> [Type] -> Bool
- eqVarBndrs :: HasCallStack => RnEnv2 -> [Var] -> [Var] -> Maybe RnEnv2
- pickyEqType :: Type -> Type -> Bool
- tcEqType :: HasDebugCallStack => Type -> Type -> Bool
- tcEqKind :: HasDebugCallStack => Kind -> Kind -> Bool
- tcEqTypeNoKindCheck :: Type -> Type -> Bool
- tcEqTyConApps :: TyCon -> [Type] -> TyCon -> [Type] -> Bool
- mayLookIdentical :: Type -> Type -> Bool
- nonDetCmpType :: Type -> Type -> Ordering
- eqForAllVis :: ForAllTyFlag -> ForAllTyFlag -> Bool
- cmpForAllVis :: ForAllTyFlag -> ForAllTyFlag -> Ordering

# Type equality

eqType :: HasCallStack => Type -> Type -> Bool Source #

Type equality comparing both visible and invisible arguments, expanding synonyms and respecting multiplicities.

eqTypeX :: HasCallStack => RnEnv2 -> Type -> Type -> Bool Source #

Compare types with respect to a (presumably) non-empty `RnEnv2`

.

eqTypes :: [Type] -> [Type] -> Bool Source #

Type equality on lists of types, looking through type synonyms

eqVarBndrs :: HasCallStack => RnEnv2 -> [Var] -> [Var] -> Maybe RnEnv2 Source #

tcEqTypeNoKindCheck :: Type -> Type -> Bool Source #

Just like `tcEqType`

, but will return True for types of different kinds
as long as their non-coercion structure is identical.

tcEqTyConApps :: TyCon -> [Type] -> TyCon -> [Type] -> Bool Source #

Check whether two TyConApps are the same; if the number of arguments are different, just checks the common prefix of arguments.

mayLookIdentical :: Type -> Type -> Bool Source #

Returns True if the *visible* part of the types
might look equal, even if they are really unequal (in the invisible bits)

This function is very similar to tc_eq_type but it is much more heuristic. Notably, it is always safe to return True, even with types that might (in truth) be unequal -- this affects error messages only (Originally this test was done by eqType with an extra flag, but the result was hard to understand.)

# Type comparison

# Visiblity comparision

eqForAllVis :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #

cmpForAllVis :: ForAllTyFlag -> ForAllTyFlag -> Ordering Source #