module Byline
(
MonadByline,
BylineT,
runBylineT,
say,
sayLn,
askLn,
askChar,
askPassword,
askUntil,
Stylized,
ToStylizedText (..),
text,
fg,
bg,
bold,
underline,
swapFgBg,
Color,
black,
red,
green,
yellow,
blue,
magenta,
cyan,
white,
vivid,
dull,
rgb,
)
where
import Byline.Internal.Color
import Byline.Internal.Eval (BylineT, MonadByline (..), runBylineT)
import qualified Byline.Internal.Prim as Prim
import Byline.Internal.Stylized
say ::
(MonadByline m, ToStylizedText a) =>
a ->
m ()
say :: forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> m ()
say =
forall a. ToStylizedText a => a -> Stylized Text
toStylizedText
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *). MonadFree PrimF m => Stylized Text -> m ()
Prim.say
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *) a. MonadByline m => F PrimF a -> m a
liftByline
sayLn ::
(MonadByline m, ToStylizedText a) =>
a ->
m ()
sayLn :: forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> m ()
sayLn =
forall a. ToStylizedText a => a -> Stylized Text
toStylizedText
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *). MonadFree PrimF m => Stylized Text -> m ()
Prim.sayLn
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *) a. MonadByline m => F PrimF a -> m a
liftByline
askLn ::
(MonadByline m, ToStylizedText a) =>
a ->
Maybe Text ->
m Text
askLn :: forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> Maybe Text -> m Text
askLn a
prompt Maybe Text
def = forall (m :: * -> *) a. MonadByline m => F PrimF a -> m a
liftByline (forall (m :: * -> *).
MonadFree PrimF m =>
Stylized Text -> Maybe Text -> m Text
Prim.askLn (forall a. ToStylizedText a => a -> Stylized Text
toStylizedText a
prompt) Maybe Text
def)
askChar ::
(MonadByline m, ToStylizedText a) =>
a ->
m Char
askChar :: forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> m Char
askChar =
forall a. ToStylizedText a => a -> Stylized Text
toStylizedText
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *). MonadFree PrimF m => Stylized Text -> m Char
Prim.askChar
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *) a. MonadByline m => F PrimF a -> m a
liftByline
askPassword ::
(MonadByline m, ToStylizedText a) =>
a ->
Maybe Char ->
m Text
askPassword :: forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> Maybe Char -> m Text
askPassword a
prompt =
forall (m :: * -> *).
MonadFree PrimF m =>
Stylized Text -> Maybe Char -> m Text
Prim.askPassword (forall a. ToStylizedText a => a -> Stylized Text
toStylizedText a
prompt)
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> forall (m :: * -> *) a. MonadByline m => F PrimF a -> m a
liftByline
askUntil ::
(MonadByline m, ToStylizedText a, ToStylizedText e) =>
a ->
Maybe Text ->
(Text -> m (Either e b)) ->
m b
askUntil :: forall (m :: * -> *) a e b.
(MonadByline m, ToStylizedText a, ToStylizedText e) =>
a -> Maybe Text -> (Text -> m (Either e b)) -> m b
askUntil a
prompt Maybe Text
def Text -> m (Either e b)
confirm = m b
go
where
go :: m b
go = do
Text
answer <- forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> Maybe Text -> m Text
askLn a
prompt Maybe Text
def
Text -> m (Either e b)
confirm Text
answer forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Left e
msg -> forall (m :: * -> *) a.
(MonadByline m, ToStylizedText a) =>
a -> m ()
sayLn e
msg forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> m b
go
Right b
res -> forall (f :: * -> *) a. Applicative f => a -> f a
pure b
res