Use Movable a to represent a type which can be used many times even
when given linearly. Simple data types such as Bool or [] are Movable.
Though, bear in mind that this typically induces a deep copy of the value.
Formally, Movable a is the class of
coalgebras of the
Ur comonad. That is
unur (move x) = xmove @(Ur a) (move @a x) = fmap (move @a) $ move @a x
Additionally, a Movable instance must be compatible with its Dupable parent instance. That is:
case move x of {Ur _ -> ()} = consume xcase move x of {Ur x -> (x, x)} = dup2 x
Instances33Movable, …
Movable AllDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable AnyDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable Int16Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Int32Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Int64Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Int8Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Word16Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Word32Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Word64Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable Word8Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphanMovable BoolDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable CharDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable DoubleDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable FloatDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable IntDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable OrderingDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable WordDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable ()Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable (Ur a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable (NonEmpty a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable (Product a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable (Sum a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable (Maybe a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable (MovableNum a)Defined in linear-base-0.4.0 · Data.Num.LinearMovable a => Movable (AsMovable a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.InstancesMovable a => Movable (a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.MovableMovable a => Movable [a]Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Generic a, GMovable (Rep a)) => Movable (Generically a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Movable a, Movable b) => Movable (Either a b)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Movable a, Movable b) => Movable (a, b)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Movable a, Movable b, Movable c) => Movable (a, b, c)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Movable a, Movable b, Movable c, Movable d) => Movable (a, b, c, d)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable(Movable a, Movable b, Movable c, Movable d, Movable e) => Movable (a, b, c, d, e)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Movable