{-# LANGUAGE RecursiveDo #-}
module Calamity.Commands.Dsl (
command,
command',
commandA,
commandA',
hide,
help,
requires,
requires',
requiresPure,
group,
group',
groupA,
groupA',
DSLState,
fetchHandler,
) where
import qualified CalamityCommands.Dsl as CC
import CalamityCommands.ParameterInfo
import Calamity.Commands.Types
import qualified Data.Text as S
import qualified Data.Text.Lazy as L
import CalamityCommands.CommandUtils (CommandForParsers, TypedCommandC)
import qualified CalamityCommands.Context as CC
import CalamityCommands.Error (CommandError)
import qualified Polysemy as P
import qualified Polysemy.Fail as P
import qualified Polysemy.Reader as P
import qualified Polysemy.Tagged as P
command' ::
P.Member (P.Final IO) r =>
S.Text ->
[ParameterInfo] ->
(c -> P.Sem r (Either CommandError a)) ->
((c, a) -> P.Sem (P.Fail ': r) ()) ->
P.Sem (DSLState c r) (Command c)
command' :: Text
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError a))
-> ((c, a) -> Sem (Fail : r) ())
-> Sem (DSLState c r) (Command c)
command' = Text
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError a))
-> ((c, a) -> Sem (Fail : r) ())
-> Sem (DSLState c r) (Command c)
forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) c p a.
(Monad m, Member (Final m) r) =>
Text
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError p))
-> ((c, p) -> Sem (Fail : r) a)
-> Sem (DSLState m c a r) (Command m c a)
CC.command'
commandA' ::
P.Member (P.Final IO) r =>
S.Text ->
[S.Text] ->
[ParameterInfo] ->
(c -> P.Sem r (Either CommandError a)) ->
((c, a) -> P.Sem (P.Fail ': r) ()) ->
P.Sem (DSLState c r) (Command c)
commandA' :: Text
-> [Text]
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError a))
-> ((c, a) -> Sem (Fail : r) ())
-> Sem (DSLState c r) (Command c)
commandA' = Text
-> [Text]
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError a))
-> ((c, a) -> Sem (Fail : r) ())
-> Sem (DSLState c r) (Command c)
forall p c a (m :: * -> *) (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r) =>
Text
-> [Text]
-> [ParameterInfo]
-> (c -> Sem r (Either CommandError p))
-> ((c, p) -> Sem (Fail : r) a)
-> Sem (DSLState m c a r) (Command m c a)
CC.commandA'
command ::
forall ps c r.
( P.Member (P.Final IO) r
, CC.CommandContext IO c ()
, TypedCommandC ps c () r
) =>
S.Text ->
(c -> CommandForParsers ps r ()) ->
P.Sem (DSLState c r) (Command c)
command :: Text
-> (c -> CommandForParsers ps r ())
-> Sem (DSLState c r) (Command c)
command = forall (ps :: [*]) c a (m :: * -> *) (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r, TypedCommandC ps c a r,
CommandContext m c a) =>
Text
-> (c -> CommandForParsers ps r a)
-> Sem (DSLState m c a r) (Command m c a)
forall c a (m :: * -> *) (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r, TypedCommandC ps c a r,
CommandContext m c a) =>
Text
-> (c -> CommandForParsers ps r a)
-> Sem (DSLState m c a r) (Command m c a)
CC.command @ps
commandA ::
forall ps c r.
( P.Member (P.Final IO) r
, CC.CommandContext IO c ()
, TypedCommandC ps c () r
) =>
S.Text ->
[S.Text] ->
(c -> CommandForParsers ps r ()) ->
P.Sem (DSLState c r) (Command c)
commandA :: Text
-> [Text]
-> (c -> CommandForParsers ps r ())
-> Sem (DSLState c r) (Command c)
commandA = forall (ps :: [*]) c a (m :: * -> *) (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r, TypedCommandC ps c a r,
CommandContext m c a) =>
Text
-> [Text]
-> (c -> CommandForParsers ps r a)
-> Sem (DSLState m c a r) (Command m c a)
forall c a (m :: * -> *) (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r, TypedCommandC ps c a r,
CommandContext m c a) =>
Text
-> [Text]
-> (c -> CommandForParsers ps r a)
-> Sem (DSLState m c a r) (Command m c a)
CC.commandA @ps
hide ::
P.Member (P.Tagged "hidden" (P.Reader Bool)) r =>
P.Sem r a ->
P.Sem r a
hide :: Sem r a -> Sem r a
hide = Sem r a -> Sem r a
forall (r :: [(* -> *) -> * -> *]) x.
Member (Tagged "hidden" (Reader Bool)) r =>
Sem r x -> Sem r x
CC.hide
help ::
P.Member (P.Reader (c -> L.Text)) r =>
(c -> L.Text) ->
P.Sem r a ->
P.Sem r a
help :: (c -> Text) -> Sem r a -> Sem r a
help = (c -> Text) -> Sem r a -> Sem r a
forall c (r :: [(* -> *) -> * -> *]) a.
Member (Reader (c -> Text)) r =>
(c -> Text) -> Sem r a -> Sem r a
CC.help
requires ::
[Check c] ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
requires :: [Check c] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
requires = [Check c] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall (m :: * -> *) c a (r :: [(* -> *) -> * -> *]) x.
[Check m c] -> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.requires
requires' ::
P.Member (P.Final IO) r =>
S.Text ->
(c -> P.Sem r (Maybe L.Text)) ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
requires' :: Text
-> (c -> Sem r (Maybe Text))
-> Sem (DSLState c r) a
-> Sem (DSLState c r) a
requires' = Text
-> (c -> Sem r (Maybe Text))
-> Sem (DSLState c r) a
-> Sem (DSLState c r) a
forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) c a x.
(Monad m, Member (Final m) r) =>
Text
-> (c -> Sem r (Maybe Text))
-> Sem (DSLState m c a r) x
-> Sem (DSLState m c a r) x
CC.requires'
requiresPure ::
[(S.Text, c -> Maybe L.Text)] ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
requiresPure :: [(Text, c -> Maybe Text)]
-> Sem (DSLState c r) a -> Sem (DSLState c r) a
requiresPure = [(Text, c -> Maybe Text)]
-> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall (m :: * -> *) c a (r :: [(* -> *) -> * -> *]) x.
Monad m =>
[(Text, c -> Maybe Text)]
-> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.requiresPure
group ::
P.Member (P.Final IO) r =>
S.Text ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
group :: Text -> Sem (DSLState c r) a -> Sem (DSLState c r) a
group = Text -> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) c a x.
(Monad m, Member (Final m) r) =>
Text -> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.group
groupA ::
P.Member (P.Final IO) r =>
S.Text ->
[S.Text] ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
groupA :: Text -> [Text] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
groupA = Text -> [Text] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall x c (m :: * -> *) a (r :: [(* -> *) -> * -> *]).
(Monad m, Member (Final m) r) =>
Text
-> [Text] -> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.groupA
group' ::
P.Member (P.Final IO) r =>
S.Text ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
group' :: Text -> Sem (DSLState c r) a -> Sem (DSLState c r) a
group' = Text -> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) c a x.
Member (Final m) r =>
Text -> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.group'
groupA' ::
P.Member (P.Final IO) r =>
S.Text ->
[S.Text] ->
P.Sem (DSLState c r) a ->
P.Sem (DSLState c r) a
groupA' :: Text -> [Text] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
groupA' = Text -> [Text] -> Sem (DSLState c r) a -> Sem (DSLState c r) a
forall x c (m :: * -> *) a (r :: [(* -> *) -> * -> *]).
Member (Final m) r =>
Text
-> [Text] -> Sem (DSLState m c a r) x -> Sem (DSLState m c a r) x
CC.groupA'
fetchHandler :: P.Sem (DSLState c r) (CommandHandler c)
fetchHandler :: Sem (DSLState c r) (CommandHandler c)
fetchHandler = Sem (DSLState c r) (CommandHandler c)
forall i (r :: [(* -> *) -> * -> *]).
MemberWithError (Reader i) r =>
Sem r i
P.ask