coerce package:headroom
The function coerce allows you to safely convert between
values of types that have the same representation with no run-time
overhead. In the simplest case you can use it instead of a newtype
constructor, to go from the newtype's concrete type to the abstract
type. But it also works in more complicated settings, e.g. converting
a list of newtypes to a list of concrete types.
This function is runtime-representation polymorphic, but the
RuntimeRep type argument is marked as Inferred,
meaning that it is not available for visible type application. This
means the typechecker will accept coerce @Int @Age 42.
This module provides some extra functionality extending the
Data.Coerce module.