pure-borrow
Safe HaskellNone
LanguageGHC2021

Control.Monad.Borrow.Pure.Lifetime.Token

Synopsis

Documentation

data Linearly Source #

Witness that the current computation is in a linear context.

linearly :: Movable a => (Linearly %1 -> a) %1 -> a Source #

data Now (α :: Lifetime) Source #

Witness that the lifetime α is ongoing.

Instances

Instances details
LinearOnly (Now α :: Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Affine (Now α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

aff :: Now α %1 -> Aff (Now α) Source #

class End (α :: Lifetime) Source #

Witness that the lifetime α has ended.

Minimal complete definition

endToken

data EndToken (α :: Lifetime) Source #

Witness that the lifetime α has ended.

Instances

Instances details
α >= β => (EndToken α :: Type) <: (EndToken β :: Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

newtype After (α :: Lifetime) a Source #

Utility type to represent an object available after the lifetime α.

You can use Applicative and Monad instances to write After conveniently.

Constructors

After (End α => a) 

Instances

Instances details
(α <= β, a <: b) => (After α a :: Type) <: (After β b :: Type) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

subtype :: SubtypeWitness (After α a) (After β b) Source #

Applicative (After α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

pure :: a %1 -> After α a #

(<*>) :: After α (a %1 -> b) %1 -> After α a %1 -> After α b #

liftA2 :: (a %1 -> b %1 -> c) %1 -> After α a %1 -> After α b %1 -> After α c #

Functor (After α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

fmap :: (a %1 -> b) %1 -> After α a %1 -> After α b #

Monad (After α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

(>>=) :: After α a %1 -> (a %1 -> After α b) %1 -> After α b #

(>>) :: After α () %1 -> After α a %1 -> After α a #

Applicative (After α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

pure :: a -> After α a #

(<*>) :: After α (a %1 -> b) %1 -> After α a %1 -> After α b #

liftA2 :: (a %1 -> b %1 -> c) -> After α a %1 -> After α b %1 -> After α c #

Functor (After α) Source # 
Instance details

Defined in Control.Monad.Borrow.Pure.Lifetime.Token.Internal

Methods

fmap :: (a %1 -> b) -> After α a %1 -> After α b #

unAfter :: forall (α :: Lifetime) a. End α => After α a %1 -> a Source #

withEnd :: forall (α :: Lifetime) r. EndToken α -> After α r %1 -> r Source #

class LinearOnly (a :: TYPE rep) Source #

A (non-bottom) value of the type a can only live in a linear context.

Minimal complete definition

linearOnly

withLinearly :: LinearOnly a => a %1 -> (Linearly, a) Source #

withLinearly# :: forall (a :: UnliftedType). LinearOnly a => a %1 -> (# Linearly, a #) Source #

endLifetime :: forall (i :: Nat). Now (Al i) %1 -> Ur (EndToken (Al i)) Source #

data SomeNow where Source #

Constructors

MkSomeNow :: forall (i :: Nat). Now (Al i) -> SomeNow 

newLifetime' :: Linearly %1 -> (forall (ι :: Nat). Now (Al ι) %1 -> a) %1 -> a Source #

nowStatic :: Now Static Source #

Static Lifetime is always available.

neverEnds :: (HasCallStack, End Static) => a Source #

Static lifetime lasts forever.