packages feed

fused-effects-readline-0.1.0.0: src/Control/Effect/Readline.hs

{-# 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 ()