incipit-0.9.0.1: A Prelude for Polysemy
Safe HaskellSafe-Inferred
LanguageGHC2021

Incipit.Full

Description

A Prelude for Polysemy projects, reexporting names and modules from several basic libraries.

Synopsis

Documentation

type Mask = Scoped_ RestoreMask #

The scoped masking effect.

data Queue d (a :: Type -> Type) b #

Abstracts queues like TBQueue.

For documentation on the constructors, see the module Polysemy.Conc.Data.Queue.

import Polysemy.Conc (Queue, QueueResult)
import Polysemy.Conc.Effect.Queue as Queue

prog :: Member (Queue Int) r => Sem r (QueueResult Int)
prog = do
  Queue.write 5
  Queue.write 10
  Queue.read >>= \case
    QueueResult.Success i -> fmap (i +) <$> Queue.read
    r -> pure r

data Events e (a :: Type -> Type) b #

An event publisher that can be consumed from multiple threads.

data QueueResult d #

Encodes failure reasons for queues.

For documentation on the constructors, see the module Polysemy.Conc.Data.QueueResult.

import qualified Polysemy.Conc.Data.QueueResult as QueueResult

Instances

Instances details
Functor QueueResult 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Methods

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

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

Monoid d => Monoid (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Semigroup d => Semigroup (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Generic (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Associated Types

type Rep (QueueResult d) :: Type -> Type #

Methods

from :: QueueResult d -> Rep (QueueResult d) x #

to :: Rep (QueueResult d) x -> QueueResult d #

Show d => Show (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Eq d => Eq (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

Ord d => Ord (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

type Rep (QueueResult d) 
Instance details

Defined in Polysemy.Conc.Data.QueueResult

type Rep (QueueResult d) = D1 ('MetaData "QueueResult" "Polysemy.Conc.Data.QueueResult" "polysemy-conc-0.13.0.1-EtMPbrUP9UyJJxgSE0Tl1c" 'False) (C1 ('MetaCons "Success" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d)) :+: (C1 ('MetaCons "NotAvailable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Closed" 'PrefixI 'False) (U1 :: Type -> Type)))

data Interrupt (a :: Type -> Type) b #

The interrupt handler effect allows three kinds of interaction for interrupt signals:

  • Execute a callback when a signal is received
  • Block a thread until a signal is received
  • Kill a thread when a signal is received

For documentation on the constructors, see the module Polysemy.Conc.Effect.Interrupt.

import qualified Polysemy.Conc.Effect.Interrupt as Interrupt

prog = do
  Interrupt.register "task 1" (putStrLn "interrupted")
  Interrupt.killOnQuit $ forever do
   doSomeWork

type UninterruptibleMask = Scoped_ RestoreMask #

The scoped uninterruptible masking effect.

data Race (a :: Type -> Type) b #

Abstract the concept of running two programs concurrently, aborting the other when one terminates. Timeout is a simpler variant, where one thread just sleeps for a given interval.

data Sync d (a :: Type -> Type) b #

Abstracts an MVar.

For documentation on the constructors, see the module Polysemy.Conc.Effect.Sync.

import Polysemy.Conc (Sync)
import qualified Polysemy.Conc.Effect.Sync as Sync

prog :: Member (Sync Int) r => Sem r Int
prog = do
  Sync.putTry 5
  Sync.takeBlock

type ScopedSync a = Scoped_ (Sync a) #

Convenience alias.

type EventConsumer e = Scoped_ (Consume e) #

Convenience alias for the consumer effect.

subscribe :: forall e (r :: EffectRow). Member (Scoped_ (Consume e)) r => InterpreterFor (Consume e) r #

Create a new scope for Events, causing the nested program to get its own copy of the event stream. To be used with interpretEventsChan.

publish :: forall e (r :: EffectRow). Member (Events e) r => e -> Sem r () #

Publish one event.

consume :: forall e (r :: EffectRow). Member (Consume e) r => Sem r e #

Consume one event emitted by Events.

runConc :: Sem ConcStack a -> IO a #

Interprets UninterruptibleMask, Mask and Race in terms of Final IO and runs the entire rest of the stack.

data Log (a :: Type -> Type) b #

The default high-level effect for simple text messages. To be used with the severity constructors:

import qualified Polysemy.Log as Log

prog = do
  Log.debug "debugging…"
  Log.warn "warning!"

Interpreters should preprocess and relay the message to DataLog.

data DataLog a (b :: Type -> Type) c #

Structural logs, used as a backend for the simpler Text log effect, Log.

Can also be used on its own, or reinterpreted into an effect like those from co-log or di.

class TimeUnit u #

Types that represent an amount of time that can be converted to each other. The methods are internal, the API function is convert.

Minimal complete definition

nanos

Instances

Instances details
TimeUnit Days 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit Hours 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit MicroSeconds 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit MilliSeconds 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit Minutes 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit NanoSeconds 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit Seconds 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit Weeks 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit DiffTime 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

TimeUnit NominalDiffTime 
Instance details

Defined in Polysemy.Time.Data.TimeUnit

data Time time date (a :: Type -> Type) b #

The Time effect.