packages feed

polysemy-conc-0.1.0.0: lib/Polysemy/Conc/Data/QueueResult.hs

-- |Description: Queue result ADT
module Polysemy.Conc.Data.QueueResult where

-- |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
-- @
data QueueResult d =
  -- |The operation was successful.
  Success d
  |
  -- |The queue is either full and cannot be added to, or empty and cannot be read from.
  NotAvailable
  |
  -- |The queue was closed by the user.
  Closed
  deriving (Eq, Show, Ord, Functor, Generic)

instance Semigroup d => Semigroup (QueueResult d) where
  Success d1 <> Success d2 = Success (d1 <> d2)
  Closed <> _ = Closed
  _ <> Closed = Closed
  NotAvailable <> _ = NotAvailable
  _ <> NotAvailable = NotAvailable

instance Monoid d => Monoid (QueueResult d) where
  mempty = Success mempty