HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulelinear-base-0.4.0Haskell2010

Data.Unrestricted.Linear.Internal.Dupable

  • 2 classes
  • 7 values
classclass Consumable a => Dupable a where
#

The laws of Dupable are dual to those of Monoid:

  • 1. first consume (dup2 a) ≃ a ≃ second consume (dup2 a) (dup2 neutrality)

  • 2. first dup2 (dup2 a) ≃ (second dup2 (dup2 a)) (dup2 associativity)

where the (≃) sign represents equality up to type isomorphism.

  • 3. dup2 = Replicator.elim (,) . dupR (coherence between dup2 and dupR)

  • 4. consume = Replicator.elim () . dupR (coherence between consume and dupR)

  • 5. Replicator.extract . dupR = id (dupR identity)

  • 6. dupR . dupR = (Replicator.map dupR) . dupR (dupR interchange)

(Laws 1-2 and 5-6 are equivalent)

Implementation of Dupable for Data.Unrestricted.Movable types should be done with deriving via Data.Unrestricted.AsMovable.

Implementation of Dupable for other types can be done with deriving via Generically. Note that at present this mechanism can have performance problems for recursive parameterized types. Specifically, the methods will not specialize to underlying Dupable instances. See this GHC issue.

Methods

  • dupR :: a %1 -> Replicator a

    Creates a Replicator for the given a.

    You usually want to define this method using Replicator's Applicative instance. For instance, here is an implementation of Dupable [a]:

    instance Dupable a => Dupable [a] where
      dupR [] = pure []
      dupR (a : as) = (:) <$> dupR a <*> dupR as
  • dup2 :: a %1 -> (a, a)

    Creates two as from a Dupable a, in a linear fashion.

Instances41Dupable, …
  • Dupable AllDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable AnyDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable Int16Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Int32Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Int64Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Int8Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Word16Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Word32Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Word64Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable Word8Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • Dupable BoolDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable CharDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable DoubleDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable FloatDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable IntDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable OrderingDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable WordDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable PoolDefined in linear-base-0.4.0 · Foreign.Marshal.Pure.Internal
  • Dupable ()Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable (Array a)Defined in linear-base-0.4.0 · Data.Array.Mutable.Linear.Internal
  • Dupable (Replicator a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable (ReplicationStream a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable (Set a)Defined in linear-base-0.4.0 · Data.Set.Mutable.Linear.Internal
  • Dupable (Ur a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable (Vector a)Defined in linear-base-0.4.0 · Data.Vector.Mutable.Linear.Internal
  • Dupable a => Dupable (NonEmpty a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable a => Dupable (Product a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable a => Dupable (Sum a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable a => Dupable (Maybe a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable a => Dupable (MovableNum a)Defined in linear-base-0.4.0 · Data.Num.Linear
  • Dupable a => Dupable (a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable a => Dupable [a]Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Movable a => Dupable (AsMovable a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances
  • (Generic a, GDupable (Rep a)) => Dupable (Generically a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable (HashMap k v)Defined in linear-base-0.4.0 · Data.HashMap.Mutable.Linear.Internal
  • (KnownNat n, Dupable a) => Dupable (V n a)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Instances · orphan
  • (Dupable a, Dupable b) => Dupable (Either a b)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (Dupable a, Dupable b) => Dupable (a, b)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (Dupable a, Dupable b, Dupable c) => Dupable (a, b, c)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (Dupable a, Dupable b, Dupable c, Dupable d) => Dupable (a, b, c, d)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (Dupable a, Dupable b, Dupable c, Dupable d, Dupable e) => Dupable (a, b, c, d, e)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
valuedup3 :: Dupable a => a %1 -> (a, a, a)
#

Creates 3 as from a Dupable a, in a linear fashion.

valuedup4 :: Dupable a => a %1 -> (a, a, a, a)
#

Creates 4 as from a Dupable a, in a linear fashion.

valuedup5 :: Dupable a => a %1 -> (a, a, a, a, a)
#

Creates 5 as from a Dupable a, in a linear fashion.

valuedup6 :: Dupable a => a %1 -> (a, a, a, a, a, a)
#

Creates 6 as from a Dupable a, in a linear fashion.

valuedup7 :: Dupable a => a %1 -> (a, a, a, a, a, a, a)
#

Creates 7 as from a Dupable a, in a linear fashion.

classclass GConsumable f => GDupable (f :: Type -> Type) where
#
Instances13GDupable, …
  • GDupable U1Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable UCharDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable UDoubleDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable UFloatDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable UIntDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable UWordDefined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable V1Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • Dupable c => GDupable (K1 i c)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable (MP1 'Many f)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable f => GDupable (MP1 'One f)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (GDupable f, GDupable g) => GDupable (f :*: g)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • (GDupable f, GDupable g) => GDupable (f :+: g)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable
  • GDupable f => GDupable (M1 i c f)Defined in linear-base-0.4.0 · Data.Unrestricted.Linear.Internal.Dupable