{-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} module Control.Effect.Readline ( -- * Readline effect Readline(..) , prompt , print -- * Re-exports , Algebra , Has , run ) where import Control.Algebra import Data.Kind (Type) import Data.Text.Prettyprint.Doc (Doc) import Data.Text.Prettyprint.Doc.Render.Terminal (AnsiStyle) import Prelude hiding (print) prompt :: Has Readline sig m => String -> m (Int, Maybe String) prompt p = send (Prompt p) print :: Has Readline sig m => Doc AnsiStyle -> m () print s = send (Print s) data Readline (m :: Type -> Type) (k :: Type) where Prompt :: String -> Readline m (Int, Maybe String) Print :: Doc AnsiStyle -> Readline m ()