{-# LANGUAGE DeriveFunctor, DeriveGeneric #-} module Control.Effect.Readline ( -- * Readline effect Readline(..) , prompt , print -- * Re-exports , Algebra , Has , run ) where import Control.Algebra import Data.Text.Prettyprint.Doc (Doc) import Data.Text.Prettyprint.Doc.Render.Terminal (AnsiStyle) import GHC.Generics (Generic1) import Prelude hiding (print) prompt :: Has Readline sig m => String -> m (Int, Maybe String) prompt p = send (Prompt p (curry pure)) print :: Has Readline sig m => Doc AnsiStyle -> m () print s = send (Print s (pure ())) data Readline m k = Prompt String (Int -> Maybe String -> m k) | Print (Doc AnsiStyle) (m k) deriving (Functor, Generic1) instance HFunctor Readline instance Effect Readline