packages feed

seihou-core-0.4.0.0: src/Seihou/Effect/Console.hs

module Seihou.Effect.Console
  ( Console (..),
    putText,
    putError,
    getLine,
    confirm,
    isInteractive,
  )
where

import Seihou.Prelude
import Prelude hiding (getLine)

data Console :: Effect where
  PutText :: Text -> Console m ()
  PutError :: Text -> Console m ()
  GetLine :: Console m Text
  Confirm :: Text -> Console m Bool
  IsInteractive :: Console m Bool

type instance DispatchOf Console = Dynamic

putText :: (Console :> es) => Text -> Eff es ()
putText msg = send (PutText msg)

putError :: (Console :> es) => Text -> Eff es ()
putError msg = send (PutError msg)

getLine :: (Console :> es) => Eff es Text
getLine = send GetLine

confirm :: (Console :> es) => Text -> Eff es Bool
confirm prompt = send (Confirm prompt)

isInteractive :: (Console :> es) => Eff es Bool
isInteractive = send IsInteractive