{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeOperators, GeneralizedNewtypeDeriving, Trustworthy #-}
module System.Console.Wizard.BasicIO
( BasicIO
, basicIO
) where
import System.Console.Wizard
import System.Console.Wizard.Internal
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
instance Run IO Output where runAlgebra :: forall v. Output (IO v) -> IO v
runAlgebra (Output String
s IO v
w) = String -> IO ()
putStr String
s forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IO v
w
instance Run IO OutputLn where runAlgebra :: forall v. OutputLn (IO v) -> IO v
runAlgebra (OutputLn String
s IO v
w) = String -> IO ()
putStrLn String
s forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IO v
w
instance Run IO Line where runAlgebra :: forall v. Line (IO v) -> IO v
runAlgebra (Line String
s String -> IO v
w) = IO String
getLine forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO v
w
instance Run IO Character where runAlgebra :: forall v. Character (IO v) -> IO v
runAlgebra (Character String
s Char -> IO v
w) = IO Char
getChar forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Char -> IO v
w
instance Run IO ArbitraryIO where runAlgebra :: forall v. ArbitraryIO (IO v) -> IO v
runAlgebra (ArbitraryIO IO a
iov a -> IO v
f) = IO a
iov forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> IO v
f
newtype BasicIO a = BasicIO (( Output
:+: OutputLn
:+: Line
:+: Character
:+: ArbitraryIO) a)
deriving ( (:<:) Output
, (:<:) OutputLn
, (:<:) Line
, (:<:) Character
, (:<:) ArbitraryIO
, forall a b. a -> BasicIO b -> BasicIO a
forall a b. (a -> b) -> BasicIO a -> BasicIO 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 -> BasicIO b -> BasicIO a
$c<$ :: forall a b. a -> BasicIO b -> BasicIO a
fmap :: forall a b. (a -> b) -> BasicIO a -> BasicIO b
$cfmap :: forall a b. (a -> b) -> BasicIO a -> BasicIO b
Functor
, Run IO
)
basicIO :: Wizard BasicIO a -> Wizard BasicIO a
basicIO :: forall a. Wizard BasicIO a -> Wizard BasicIO a
basicIO = forall a. a -> a
id