{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, TypeOperators, GeneralizedNewtypeDeriving, Trustworthy #-}
module System.Console.Wizard.Haskeline
( UnexpectedEOF (..)
, Haskeline
, haskeline
, withSettings
, WithSettings(..)
) where
import System.Console.Wizard
import System.Console.Wizard.Internal
import System.Console.Haskeline
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
import Control.Exception
import Data.Typeable
data UnexpectedEOF = UnexpectedEOF deriving (Int -> UnexpectedEOF -> ShowS
[UnexpectedEOF] -> ShowS
UnexpectedEOF -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UnexpectedEOF] -> ShowS
$cshowList :: [UnexpectedEOF] -> ShowS
show :: UnexpectedEOF -> String
$cshow :: UnexpectedEOF -> String
showsPrec :: Int -> UnexpectedEOF -> ShowS
$cshowsPrec :: Int -> UnexpectedEOF -> ShowS
Show, Typeable)
instance Exception UnexpectedEOF
newtype Haskeline a = Haskeline (( Output
:+: OutputLn
:+: Line
:+: Character
:+: LinePrewritten
:+: Password
:+: ArbitraryIO
:+: WithSettings) a)
deriving ( (:<:) Output
, (:<:) OutputLn
, (:<:) Line
, (:<:) Character
, (:<:) LinePrewritten
, (:<:) Password
, (:<:) ArbitraryIO
, (:<:) WithSettings
, forall a b. a -> Haskeline b -> Haskeline a
forall a b. (a -> b) -> Haskeline a -> Haskeline b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Haskeline b -> Haskeline a
$c<$ :: forall a b. a -> Haskeline b -> Haskeline a
fmap :: forall a b. (a -> b) -> Haskeline a -> Haskeline b
$cfmap :: forall a b. (a -> b) -> Haskeline a -> Haskeline b
Functor
, Run (InputT IO)
)
withSettings :: (WithSettings :<: b) => Settings IO -> Wizard b a -> Wizard b a
withSettings :: forall (b :: * -> *) a.
(WithSettings :<: b) =>
Settings IO -> Wizard b a -> Wizard b a
withSettings Settings IO
sets (Wizard (MaybeT Free b (Maybe a)
v)) = forall (backend :: * -> *) a.
MaybeT (Free backend) a -> Wizard backend a
Wizard forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT forall a b. (a -> b) -> a -> b
$ forall (g :: * -> *) (f :: * -> *) a.
(g :<: f) =>
g (Free f a) -> Free f a
inject (forall w. Settings IO -> w -> WithSettings w
WithSettings Settings IO
sets Free b (Maybe a)
v)
data WithSettings w = WithSettings (Settings IO) w deriving (forall a b. a -> WithSettings b -> WithSettings a
forall a b. (a -> b) -> WithSettings a -> WithSettings b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> WithSettings b -> WithSettings a
$c<$ :: forall a b. a -> WithSettings b -> WithSettings a
fmap :: forall a b. (a -> b) -> WithSettings a -> WithSettings b
$cfmap :: forall a b. (a -> b) -> WithSettings a -> WithSettings b
Functor)
instance Run (InputT IO) Output where runAlgebra :: forall v. Output (InputT IO v) -> InputT IO v
runAlgebra (Output String
s InputT IO v
w) = forall (m :: * -> *). MonadIO m => String -> InputT m ()
outputStr String
s forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> InputT IO v
w
instance Run (InputT IO) OutputLn where runAlgebra :: forall v. OutputLn (InputT IO v) -> InputT IO v
runAlgebra (OutputLn String
s InputT IO v
w) = forall (m :: * -> *). MonadIO m => String -> InputT m ()
outputStrLn String
s forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> InputT IO v
w
instance Run (InputT IO) Line where runAlgebra :: forall v. Line (InputT IO v) -> InputT IO v
runAlgebra (Line String
s String -> InputT IO v
w) = forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
String -> InputT m (Maybe String)
getInputLine String
s forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall {a} {b}. (a -> b) -> Maybe a -> b
mEof String -> InputT IO v
w
instance Run (InputT IO) Character where runAlgebra :: forall v. Character (InputT IO v) -> InputT IO v
runAlgebra (Character String
s Char -> InputT IO v
w) = forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
String -> InputT m (Maybe Char)
getInputChar String
s forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall {a} {b}. (a -> b) -> Maybe a -> b
mEof Char -> InputT IO v
w
instance Run (InputT IO) LinePrewritten where runAlgebra :: forall v. LinePrewritten (InputT IO v) -> InputT IO v
runAlgebra (LinePrewritten String
p String
s1 String
s2 String -> InputT IO v
w) = forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
String -> (String, String) -> InputT m (Maybe String)
getInputLineWithInitial String
p (String
s1,String
s2) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall {a} {b}. (a -> b) -> Maybe a -> b
mEof String -> InputT IO v
w
instance Run (InputT IO) Password where runAlgebra :: forall v. Password (InputT IO v) -> InputT IO v
runAlgebra (Password String
p Maybe Char
mc String -> InputT IO v
w) = forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
Maybe Char -> String -> InputT m (Maybe String)
getPassword Maybe Char
mc String
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall {a} {b}. (a -> b) -> Maybe a -> b
mEof String -> InputT IO v
w
instance Run (InputT IO) ArbitraryIO where runAlgebra :: forall v. ArbitraryIO (InputT IO v) -> InputT IO v
runAlgebra (ArbitraryIO IO a
iov a -> InputT IO v
f) = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO a
iov forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> InputT IO v
f
instance Run (InputT IO) WithSettings where runAlgebra :: forall v. WithSettings (InputT IO v) -> InputT IO v
runAlgebra (WithSettings Settings IO
sets InputT IO v
w) = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (forall (m :: * -> *) a.
(MonadIO m, MonadMask m) =>
Settings m -> InputT m a -> m a
runInputT Settings IO
sets InputT IO v
w)
mEof :: (a -> b) -> Maybe a -> b
mEof = forall b a. b -> (a -> b) -> Maybe a -> b
maybe (forall a e. Exception e => e -> a
throw UnexpectedEOF
UnexpectedEOF)
haskeline :: Wizard Haskeline a -> Wizard Haskeline a
haskeline :: forall a. Wizard Haskeline a -> Wizard Haskeline a
haskeline = forall a. a -> a
id