-- | Near zero-cost coercions between lifted and boxed unlifted types. -- -- Turn any lifted type into an unlifted boxed type with 'Strict', eagerly -- forcing any wrapped computation in the syntactic binding context. -- -- Turn any unlifted boxed type into a lifted type with 'Lazy', suspending any -- wrapped computation until the 'Lazy' is matched upon. -- -- Re-use existing code by coercing functions that can be generalised according -- to the levity polymorphism subkinding law @Unlifted <: Lifted@ with -- 'levCoerce'. module Data.Elevator ( UnliftedType, LiftedType , Strict(Strict), Lazy(Lazy) , levCoerce, LevitySubsumption(..) ) where import Data.Elevator.Internal import GHC.Exts