stream-timers-0.1.0.0: Some stream timers, and experiments with them

Safe HaskellNone
LanguageHaskell2010

Data.Expire

Synopsis

Documentation

expireSteps :: Int Source #

expireSteps is a global number of steps taken for expiration. The idea is that the monad will throw some sort of exception, or result in Nothing, when more than this many Functor, Applicative, or Monad steps (actions) have been taken.

newtype Expire a Source #

Pure expiration, return Nothing to expire

Constructors

Expire 

Fields

Instances

Monad Expire Source # 

Methods

(>>=) :: Expire a -> (a -> Expire b) -> Expire b #

(>>) :: Expire a -> Expire b -> Expire b #

return :: a -> Expire a #

fail :: String -> Expire a #

Functor Expire Source # 

Methods

fmap :: (a -> b) -> Expire a -> Expire b #

(<$) :: a -> Expire b -> Expire a #

Applicative Expire Source # 

Methods

pure :: a -> Expire a #

(<*>) :: Expire (a -> b) -> Expire a -> Expire b #

liftA2 :: (a -> b -> c) -> Expire a -> Expire b -> Expire c #

(*>) :: Expire a -> Expire b -> Expire b #

(<*) :: Expire a -> Expire b -> Expire a #

Eq a => Eq (Expire a) Source # 

Methods

(==) :: Expire a -> Expire a -> Bool #

(/=) :: Expire a -> Expire a -> Bool #

Ord a => Ord (Expire a) Source # 

Methods

compare :: Expire a -> Expire a -> Ordering #

(<) :: Expire a -> Expire a -> Bool #

(<=) :: Expire a -> Expire a -> Bool #

(>) :: Expire a -> Expire a -> Bool #

(>=) :: Expire a -> Expire a -> Bool #

max :: Expire a -> Expire a -> Expire a #

min :: Expire a -> Expire a -> Expire a #

Show a => Show (Expire a) Source # 

Methods

showsPrec :: Int -> Expire a -> ShowS #

show :: Expire a -> String #

showList :: [Expire a] -> ShowS #

newtype ExpireIO a Source #

Expire with IO, use a Weak reference outside of the Maybe that Expire uses.

Hopefully, ExpireIO will give near-instant expiration, not like Expire, which seems to take around 1ns per action after expiration.

Constructors

ExpireIO 

Fields

Instances

Monad ExpireIO Source # 

Methods

(>>=) :: ExpireIO a -> (a -> ExpireIO b) -> ExpireIO b #

(>>) :: ExpireIO a -> ExpireIO b -> ExpireIO b #

return :: a -> ExpireIO a #

fail :: String -> ExpireIO a #

Functor ExpireIO Source # 

Methods

fmap :: (a -> b) -> ExpireIO a -> ExpireIO b #

(<$) :: a -> ExpireIO b -> ExpireIO a #

Applicative ExpireIO Source # 

Methods

pure :: a -> ExpireIO a #

(<*>) :: ExpireIO (a -> b) -> ExpireIO a -> ExpireIO b #

liftA2 :: (a -> b -> c) -> ExpireIO a -> ExpireIO b -> ExpireIO c #

(*>) :: ExpireIO a -> ExpireIO b -> ExpireIO b #

(<*) :: ExpireIO a -> ExpireIO b -> ExpireIO a #

stepExpire :: Int -> a -> (Int, Maybe a) Source #

Note: stepExpire will never halt if Int is negative, so instead it throws an error

coerceWeak :: Weak a -> Weak b Source #

Note: This is only safe if a Weak pointer has _already_ been dereferenced

getExpireIO :: ExpireIO a -> IO (Maybe a) Source #

Deref an ExpireIO, only returning the value, or return Nothing

dumpExpireIO :: ExpireIO a -> IO (Maybe (Int, a)) Source #

Dereference an ExpireIO, or return Nothing

newtype ExpireE a Source #

Expire that throws and error instead of returning Nothing

Constructors

ExpireE 

Fields

Instances

Monad ExpireE Source # 

Methods

(>>=) :: ExpireE a -> (a -> ExpireE b) -> ExpireE b #

(>>) :: ExpireE a -> ExpireE b -> ExpireE b #

return :: a -> ExpireE a #

fail :: String -> ExpireE a #

Functor ExpireE Source # 

Methods

fmap :: (a -> b) -> ExpireE a -> ExpireE b #

(<$) :: a -> ExpireE b -> ExpireE a #

Applicative ExpireE Source # 

Methods

pure :: a -> ExpireE a #

(<*>) :: ExpireE (a -> b) -> ExpireE a -> ExpireE b #

liftA2 :: (a -> b -> c) -> ExpireE a -> ExpireE b -> ExpireE c #

(*>) :: ExpireE a -> ExpireE b -> ExpireE b #

(<*) :: ExpireE a -> ExpireE b -> ExpireE a #

Eq a => Eq (ExpireE a) Source # 

Methods

(==) :: ExpireE a -> ExpireE a -> Bool #

(/=) :: ExpireE a -> ExpireE a -> Bool #

Ord a => Ord (ExpireE a) Source # 

Methods

compare :: ExpireE a -> ExpireE a -> Ordering #

(<) :: ExpireE a -> ExpireE a -> Bool #

(<=) :: ExpireE a -> ExpireE a -> Bool #

(>) :: ExpireE a -> ExpireE a -> Bool #

(>=) :: ExpireE a -> ExpireE a -> Bool #

max :: ExpireE a -> ExpireE a -> ExpireE a #

min :: ExpireE a -> ExpireE a -> ExpireE a #

Show a => Show (ExpireE a) Source # 

Methods

showsPrec :: Int -> ExpireE a -> ShowS #

show :: ExpireE a -> String #

showList :: [ExpireE a] -> ShowS #