h* %      !"#$0.1.0.2 Safe-Inferred()*013  data-elevator Similar to %, this type class models a subkinding relationship between two types. The instances lift the Unlifted <: Lifted sub-kinding relationship to &, ,  and then over function types. Like for %, the instances of this type class should ultimately be compiler-generated. data-elevator0Turn an unlifted boxed type into a lifted one. Lazy a5 then enjoys a call-by-name calling convention. E.g., let f :: a -> Int f _ = 42 in f (Lazy (error "boom" :: Array# Int))Will evaluate to 42 and not error. data-elevatorTurn a lifted data type into an unlifted one. Unlifted data types enjoy a call-by-value calling convention. E.g., let f :: (a :: UnliftedType) -> Int f _ = 42 in f (Strict (error "boom" :: Int))Will error out with "boom".Note however that most function definitions don't take argument types of kind . Use  to work around that.  data-elevator-The kind of boxed, lifted types, for example [Int]& or any other user-defined data type. data-elevator?Re-use existing code taking arguments lazily to take arguments ly by coercing with  .Example: ' can be re-used on  Strict Int:?levCoerce @(Int -> Bool) @(Strict Int -> Bool) even (Strict 42)True!More generally, any type of kind % can act as a ("is-a") type of kind  -. This levity polymorphism subkinding axiom Unlifted <: Lifted is encoded in ( and is lifted to useful instances for ,  and (->).. Example with covariance in the result type:levCoerce @(Int -> Strict Bool) @(Strict Int -> Bool) (\x -> Strict (even x)) (Strict 42)TrueA function from Int to  Strict Bool can be called on a  Strict Int (e.g., the precondition strengthened) and the result can be coerced to Bool% (e.g., the postcondition weakened).You can also keep on coercing in negative position of the function arrow, with the variance following polarity: levCoerce @((Strict Int -> Int) -> Int) @((Int -> Strict Int) -> Int) (\f -> f (Strict 42)) (\x -> Strict x)     Safe-Inferred      (        !"#$%&'()*+,-./,data-elevator-0.1.0.2-GcZDIBVpghTEbJ2wYGMy8t Data.ElevatorData.Elevator.Internal data-elevatorghc-prim GHC.Types UnliftedTypeLevitySubsumption levCoerce#LazyLazy_StrictStrict_LU LiftedType toStrict# fromStrict#toLazy# fromLazy# levCoerce%$fLevitySubsumptionLiftedLiftedFUNFUN&$fLevitySubsumptionLiftedLiftedFUNFUN0&$fLevitySubsumptionLiftedLiftedFUNFUN1&$fLevitySubsumptionLiftedLiftedFUNFUN2&$fLevitySubsumptionLiftedLiftedFUNFUN3&$fLevitySubsumptionLiftedLiftedFUNFUN4&$fLevitySubsumptionLiftedLiftedFUNFUN5&$fLevitySubsumptionLiftedLiftedFUNFUN6&$fLevitySubsumptionLiftedLiftedFUNFUN7&$fLevitySubsumptionLiftedLiftedFUNFUN8&$fLevitySubsumptionLiftedLiftedFUNFUN9'$fLevitySubsumptionLiftedLiftedFUNFUN10'$fLevitySubsumptionLiftedLiftedFUNFUN11'$fLevitySubsumptionLiftedLiftedFUNFUN12'$fLevitySubsumptionLiftedLiftedFUNFUN13'$fLevitySubsumptionLiftedLiftedFUNFUN14&$fLevitySubsumptionUnliftedLiftedaLazy($fLevitySubsumptionUnliftedLiftedStricta%$fLevitySubsumptionUnliftedUnliftedaa!$fLevitySubsumptionLiftedLiftedaa CoercibleGHC.PrimTYPEbaseGHC.Realeven