-- |Client Effect, Internal
module Helic.Effect.Client where

import Polysemy (makeSem_)

import Helic.Data.Event (Event)

-- |An abstraction of the API, used by the @list@ command.
data Client :: Effect where
  -- |Return all events currently in memory.
  Get :: Client m (Either Text [Event])
  -- |Add a new event.
  Yank :: Event -> Client m (Either Text ())

makeSem_ ''Client

-- |Return all events currently in memory.
get ::
   r .
  Member Client r =>
  Sem r (Either Text [Event])

-- |Add a new event.
yank ::
   r .
  Member Client r =>
  Event ->
  Sem r (Either Text ())