pure-borrow
Safe HaskellNone
LanguageGHC2021

Control.Monad.Borrow.Pure.Clone

Synopsis

Documentation

class Clone a where Source #

Clone a is analogous o Copyable a, but requires cloned values to be accessible only inside the BO α monad.

The difference between Clone and Copyable is that the former allows for cloning a shared borrow of a mutable or linear value, while the latter requires cloning a shared borrow of an immutable value. This is because we can leak Share α a via Movable instance, and hence it can outlive the original BO α lifetime, which allows leaking mutable states inside a into unrestricted contexts, which destroys the soundness severly.

Minimal complete definition

Nothing

Methods

clone :: forall (α :: Lifetime). Share α a %1 -> BO α a Source #

default clone :: forall (α :: Lifetime). GenericClone a => Share α a %1 -> BO α a Source #

Instances

Instances details
Clone Int16 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Int16 %1 -> BO α Int16 Source #

Clone Int32 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Int32 %1 -> BO α Int32 Source #

Clone Int64 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Int64 %1 -> BO α Int64 Source #

Clone Int8 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Int8 %1 -> BO α Int8 Source #

Clone Word16 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Word16 %1 -> BO α Word16 Source #

Clone Word32 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Word32 %1 -> BO α Word32 Source #

Clone Word64 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Word64 %1 -> BO α Word64 Source #

Clone Word8 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Word8 %1 -> BO α Word8 Source #

Clone Integer Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Integer %1 -> BO α Integer Source #

Clone Natural Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Natural %1 -> BO α Natural Source #

Clone () Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α () %1 -> BO α () Source #

Clone Bool Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Bool %1 -> BO α Bool Source #

Clone Char Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Char %1 -> BO α Char Source #

Clone Double Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Double %1 -> BO α Double Source #

Clone Float Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Float %1 -> BO α Float Source #

Clone Int Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Int %1 -> BO α Int Source #

Clone Word Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α Word %1 -> BO α Word Source #

Clone a => Clone (NonEmpty a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (NonEmpty a) %1 -> BO α (NonEmpty a) Source #

GenericClone a => Clone (Generically a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (Generically a) %1 -> BO α (Generically a) Source #

Copyable a => Clone (AsCopyable a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (AsCopyable a) %1 -> BO α (AsCopyable a) Source #

Dupable a => Clone (Ref a) Source # 
Instance details

Defined in Data.Ref.Linear

Methods

clone :: forall (α :: Lifetime). Share α (Ref a) %1 -> BO α (Ref a) Source #

Dupable a => Clone (Vector a) Source # 
Instance details

Defined in Data.Vector.Mutable.Linear.Borrow

Methods

clone :: forall (α :: Lifetime). Share α (Vector a) %1 -> BO α (Vector a) Source #

Clone a => Clone (Maybe a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (Maybe a) %1 -> BO α (Maybe a) Source #

Clone a => Clone [a] Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α [a] %1 -> BO α [a] Source #

(Clone a, Clone b) => Clone (Either a b) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (Either a b) %1 -> BO α (Either a b) Source #

(Clone a, Clone b) => Clone (a, b) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (a, b) %1 -> BO α (a, b) Source #

(Clone a, Clone b, Clone c) => Clone (a, b, c) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (a, b, c) %1 -> BO α (a, b, c) Source #

(Clone a, Clone b, Clone c, Clone d) => Clone (a, b, c, d) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (a, b, c, d) %1 -> BO α (a, b, c, d) Source #

(Clone a, Clone b, Clone c, Clone d, Clone e) => Clone (a, b, c, d, e) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (a, b, c, d, e) %1 -> BO α (a, b, c, d, e) Source #

genericClone :: forall a (α :: Lifetime). GenericClone a => Share α a %1 -> BO α a Source #

newtype AsCopyable a Source #

Constructors

AsCopyable a 

Instances

Instances details
Copyable a => Clone (AsCopyable a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

clone :: forall (α :: Lifetime). Share α (AsCopyable a) %1 -> BO α (AsCopyable a) Source #

Copyable a => Copyable (AsCopyable a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

copy :: forall (bk :: BorrowKind) (α :: Lifetime). Borrow bk α (AsCopyable a) %1 -> AsCopyable a Source #

class Clone1 (f :: Type -> Type) where Source #

Lifting of the Clone operation to unary type constructors.

Minimal complete definition

Nothing

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (f a) %1 -> BO α (f b) Source #

default liftClone :: forall (α :: Lifetime) a b. GenericClone1 f => (Share α a %1 -> BO α b) -> Share α (f a) %1 -> BO α (f b) Source #

Instances

Instances details
Clone1 NonEmpty Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (NonEmpty a) %1 -> BO α (NonEmpty b) Source #

Clone1 Par1 Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (Par1 a) %1 -> BO α (Par1 b) Source #

Clone1 Maybe Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (Maybe a) %1 -> BO α (Maybe b) Source #

Clone1 [] Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α [a] %1 -> BO α [b] Source #

Clone a => Clone1 (Either a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a0 b. (Share α a0 %1 -> BO α b) -> Share α (Either a a0) %1 -> BO α (Either a b) Source #

Clone1 (Proxy :: Type -> Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (Proxy a) %1 -> BO α (Proxy b) Source #

Clone1 (U1 :: Type -> Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (U1 a) %1 -> BO α (U1 b) Source #

Clone1 (V1 :: Type -> Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (V1 a) %1 -> BO α (V1 b) Source #

Clone a => Clone1 ((,) a) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a0 b. (Share α a0 %1 -> BO α b) -> Share α (a, a0) %1 -> BO α (a, b) Source #

GenericClone1 f => Clone1 (Generically1 f) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (Generically1 f a) %1 -> BO α (Generically1 f b) Source #

(Clone1 f, Clone1 g) => Clone1 (f :*: g) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α ((f :*: g) a) %1 -> BO α ((f :*: g) b) Source #

(Clone1 f, Clone1 g) => Clone1 (f :+: g) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α ((f :+: g) a) %1 -> BO α ((f :+: g) b) Source #

Clone a => Clone1 (K1 i a :: Type -> Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a0 b. (Share α a0 %1 -> BO α b) -> Share α (K1 i a a0) %1 -> BO α (K1 i a b) Source #

Clone1 f => Clone1 (M1 i c f) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α (M1 i c f a) %1 -> BO α (M1 i c f b) Source #

(Clone1 f, Clone1 g) => Clone1 (f :.: g) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Clone

Methods

liftClone :: forall (α :: Lifetime) a b. (Share α a %1 -> BO α b) -> Share α ((f :.: g) a) %1 -> BO α ((f :.: g) b) Source #

clone1 :: forall f a (α :: Lifetime). (Clone1 f, Clone a) => Share α (f a) %1 -> BO α (f a) Source #

type GenericClone1 (f :: Type -> Type) = (Clone1 (Rep1 f), Generic1 f) Source #

genericLiftClone :: forall f a b (α :: Lifetime). GenericClone1 f => (Share α a %1 -> BO α b) -> Share α (f a) %1 -> BO α (f b) Source #

genericClone1 :: forall f a (α :: Lifetime). (GenericClone1 f, Clone a) => Share α (f a) %1 -> BO α (f a) Source #