-- | Semantics of human player commands.
module Game.LambdaHack.Client.UI.HandleHumanM
  ( restrictedCmdSemInCxtOfKM, updateKeyLast
#ifdef EXPOSE_INTERNAL
    -- * Internal operations
  , noRemoteHumanCmd, cmdSemInCxtOfKM, cmdSemantics, addNoError
#endif
  ) where

import Prelude ()

import Game.LambdaHack.Core.Prelude

import           Game.LambdaHack.Client.MonadClient
import           Game.LambdaHack.Client.Request
import           Game.LambdaHack.Client.UI.HandleHelperM
import           Game.LambdaHack.Client.UI.HandleHumanGlobalM
import           Game.LambdaHack.Client.UI.HandleHumanLocalM
import           Game.LambdaHack.Client.UI.HumanCmd
import qualified Game.LambdaHack.Client.UI.Key as K
import           Game.LambdaHack.Client.UI.MonadClientUI
import           Game.LambdaHack.Client.UI.SessionUI

-- | The semantics of human player commands in terms of the client monad,
-- in context of the given @km@ as the last action.
--
-- Some time cosuming commands are enabled even in aiming mode, but cannot be
-- invoked in aiming mode on a remote level (level different than
-- the level of the leader), which is caught here.
restrictedCmdSemInCxtOfKM :: (MonadClient m, MonadClientUI m)
                          => K.KM -> HumanCmd -> m (Either MError ReqUI)
restrictedCmdSemInCxtOfKM :: KM -> HumanCmd -> m (Either MError ReqUI)
restrictedCmdSemInCxtOfKM km :: KM
km cmd :: HumanCmd
cmd =
  if HumanCmd -> Bool
noRemoteHumanCmd HumanCmd
cmd then do
    -- If in aiming mode, check if the current level is the same
    -- as player level and refuse performing the action otherwise.
    LevelId
arena <- m LevelId
forall (m :: * -> *). MonadClientUI m => m LevelId
getArenaUI
    LevelId
lidV <- m LevelId
forall (m :: * -> *). MonadClientUI m => m LevelId
viewedLevelUI
    if LevelId
arena LevelId -> LevelId -> Bool
forall a. Eq a => a -> a -> Bool
/= LevelId
lidV then
      FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> m (FailOrCmd ReqUI)
forall (m :: * -> *) a. MonadClientUI m => Text -> m (FailOrCmd a)
failWith
        "command disabled on a remote level, press ESC to switch back"
    else KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM KM
km HumanCmd
cmd
  else KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM KM
km HumanCmd
cmd

-- | Commands that are forbidden on a remote level, because they
-- would usually take time when invoked on one, but not necessarily do
-- what the player expects. Note that some commands that normally take time
-- are not included, because they don't take time in aiming mode
-- or their individual sanity conditions include a remote level check.
noRemoteHumanCmd :: HumanCmd -> Bool
noRemoteHumanCmd :: HumanCmd -> Bool
noRemoteHumanCmd cmd :: HumanCmd
cmd = case HumanCmd
cmd of
  Wait          -> Bool
True
  Wait10        -> Bool
True
  MoveItem{}    -> Bool
True
  Apply{}       -> Bool
True
  AlterDir{}    -> Bool
True
  AlterWithPointer{} -> Bool
True
  MoveOnceToXhair -> Bool
True
  RunOnceToXhair -> Bool
True
  ContinueToXhair -> Bool
True
  _ -> Bool
False

updateKeyLast :: K.KM -> HumanCmd -> KeyMacroFrame -> KeyMacroFrame
updateKeyLast :: KM -> HumanCmd -> KeyMacroFrame -> KeyMacroFrame
updateKeyLast km :: KM
km cmd :: HumanCmd
cmd macroFrame :: KeyMacroFrame
macroFrame = case HumanCmd
cmd of
  RepeatLast{} -> KeyMacroFrame
macroFrame
  Record{} -> KeyMacroFrame
macroFrame
  _ -> KeyMacroFrame
macroFrame {keyLast :: Maybe KM
keyLast = KM -> Maybe KM
forall a. a -> Maybe a
Just KM
km}

-- Semantics of the command in context of the given @km@ as the last action.
cmdSemInCxtOfKM :: (MonadClient m, MonadClientUI m)
                => K.KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM :: KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM km :: KM
km cmd :: HumanCmd
cmd = do
  (SessionUI -> SessionUI) -> m ()
forall (m :: * -> *).
MonadClientUI m =>
(SessionUI -> SessionUI) -> m ()
modifySession ((SessionUI -> SessionUI) -> m ())
-> (SessionUI -> SessionUI) -> m ()
forall a b. (a -> b) -> a -> b
$ \sess :: SessionUI
sess ->
    SessionUI
sess {smacroFrame :: KeyMacroFrame
smacroFrame = KM -> HumanCmd -> KeyMacroFrame -> KeyMacroFrame
updateKeyLast KM
km HumanCmd
cmd (KeyMacroFrame -> KeyMacroFrame) -> KeyMacroFrame -> KeyMacroFrame
forall a b. (a -> b) -> a -> b
$ SessionUI -> KeyMacroFrame
smacroFrame SessionUI
sess}
  HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd

cmdSemantics :: (MonadClient m, MonadClientUI m)
             => HumanCmd -> m (Either MError ReqUI)
cmdSemantics :: HumanCmd -> m (Either MError ReqUI)
cmdSemantics cmd :: HumanCmd
cmd = case HumanCmd
cmd of
  Macro kms :: [String]
kms -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError (m () -> m (Either MError ReqUI))
-> m () -> m (Either MError ReqUI)
forall a b. (a -> b) -> a -> b
$ [String] -> m ()
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
[String] -> m ()
macroHuman [String]
kms
  ByArea l :: [(CmdArea, HumanCmd)]
l -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> [(CmdArea, HumanCmd)] -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> [(CmdArea, HumanCmd)] -> m (Either MError ReqUI)
byAreaHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM [(CmdArea, HumanCmd)]
l
  ByAimMode AimModeCmd{..} ->
    m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
byAimModeHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
exploration) (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
aiming)
  ComposeIfLocal cmd1 :: HumanCmd
cmd1 cmd2 :: HumanCmd
cmd2 ->
    m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
composeIfLocalHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd1) (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd2)
  ComposeUnlessError cmd1 :: HumanCmd
cmd1 cmd2 :: HumanCmd
cmd2 ->
    m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
composeUnlessErrorHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd1) (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd2)
  Compose2ndLocal cmd1 :: HumanCmd
cmd1 cmd2 :: HumanCmd
cmd2 ->
    m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI)
-> m (Either MError ReqUI) -> m (Either MError ReqUI)
compose2ndLocalHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd1) (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd2)
  LoopOnNothing cmd1 :: HumanCmd
cmd1 -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI) -> m (Either MError ReqUI)
loopOnNothingHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd1)
  ExecuteIfClear cmd1 :: HumanCmd
cmd1 -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *).
MonadClientUI m =>
m (Either MError ReqUI) -> m (Either MError ReqUI)
executeIfClearHuman (HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
HumanCmd -> m (Either MError ReqUI)
cmdSemantics HumanCmd
cmd1)

  Wait -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
MonadClientUI m =>
m (Either FailError RequestTimed)
waitHuman)
  Wait10 -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
MonadClientUI m =>
m (Either FailError RequestTimed)
waitHuman10)
  Yell -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
MonadClientUI m =>
m (Either FailError RequestTimed)
yellHuman)
  MoveDir v :: Vector
v ->
    FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Bool
-> Bool
-> Bool
-> Bool
-> Vector
-> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Bool
-> Bool
-> Bool
-> Bool
-> Vector
-> m (Either FailError RequestTimed)
moveRunHuman Bool
True Bool
True Bool
False Bool
False Vector
v)
  RunDir v :: Vector
v -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Bool
-> Bool
-> Bool
-> Bool
-> Vector
-> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Bool
-> Bool
-> Bool
-> Bool
-> Vector
-> m (Either FailError RequestTimed)
moveRunHuman Bool
True Bool
True Bool
True Bool
True Vector
v)
  RunOnceAhead -> RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either MError RequestTimed) -> m (Either MError ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either MError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either MError RequestTimed)
runOnceAheadHuman
  MoveOnceToXhair -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
moveOnceToXhairHuman)
  RunOnceToXhair  -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
runOnceToXhairHuman)
  ContinueToXhair -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
continueToXhairHuman)
  MoveItem stores :: [CStore]
stores toCStore :: CStore
toCStore mverb :: Maybe Text
mverb auto :: Bool
auto ->
    FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> [CStore]
-> CStore
-> Maybe Text
-> Bool
-> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
[CStore]
-> CStore
-> Maybe Text
-> Bool
-> m (Either FailError RequestTimed)
moveItemHuman [CStore]
stores CStore
toCStore Maybe Text
mverb Bool
auto)
  Project -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
projectHuman)
  Apply -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
applyHuman)
  AlterDir -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
alterDirHuman)
  AlterWithPointer -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
alterWithPointerHuman)
  CloseDir -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (RequestTimed -> ReqUI
ReqUITimed (RequestTimed -> ReqUI)
-> m (Either FailError RequestTimed) -> m (FailOrCmd ReqUI)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> m (Either FailError RequestTimed)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (Either FailError RequestTimed)
closeDirHuman)
  Help -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
helpHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  Hint -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
hintHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  ItemMenu -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
itemMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  ChooseItemMenu dialogMode :: ItemDialogMode
dialogMode -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> ItemDialogMode -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> ItemDialogMode -> m (Either MError ReqUI)
chooseItemMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM ItemDialogMode
dialogMode
  MainMenu -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
mainMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  MainMenuAutoOn -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
mainMenuAutoOnHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  MainMenuAutoOff -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
mainMenuAutoOffHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  Dashboard -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
dashboardHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameTutorialToggle -> m ()
forall (m :: * -> *). MonadClientUI m => m ()
gameTutorialToggle
                        m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameDifficultyIncr -> m ()
forall (m :: * -> *). MonadClient m => m ()
gameDifficultyIncr
                        m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameFishToggle -> m ()
forall (m :: * -> *). MonadClient m => m ()
gameFishToggle m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameGoodsToggle -> m ()
forall (m :: * -> *). MonadClient m => m ()
gameGoodsToggle m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameWolfToggle -> m ()
forall (m :: * -> *). MonadClient m => m ()
gameWolfToggle m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameKeeperToggle -> m ()
forall (m :: * -> *). MonadClient m => m ()
gameKeeperToggle m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  GameScenarioIncr -> m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
gameScenarioIncr m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM

  GameRestart -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (FailOrCmd ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (FailOrCmd ReqUI)
gameRestartHuman
  GameQuit -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (FailOrCmd ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (FailOrCmd ReqUI)
gameQuitHuman
  GameDrop -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ReqUI -> FailOrCmd ReqUI) -> m ReqUI -> m (FailOrCmd ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ReqUI -> FailOrCmd ReqUI
forall a b. b -> Either a b
Right m ReqUI
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ReqUI
gameDropHuman
  GameExit -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ReqUI -> FailOrCmd ReqUI) -> m ReqUI -> m (FailOrCmd ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ReqUI -> FailOrCmd ReqUI
forall a b. b -> Either a b
Right m ReqUI
forall (m :: * -> *). Monad m => m ReqUI
gameExitHuman
  GameSave -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ReqUI -> FailOrCmd ReqUI) -> m ReqUI -> m (FailOrCmd ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ReqUI -> FailOrCmd ReqUI
forall a b. b -> Either a b
Right m ReqUI
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ReqUI
gameSaveHuman
  Doctrine -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (FailOrCmd ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (FailOrCmd ReqUI)
doctrineHuman
  Automate -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (FailOrCmd ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (FailOrCmd ReqUI)
automateHuman
  AutomateToggle -> FailOrCmd ReqUI -> Either MError ReqUI
forall a. FailOrCmd a -> Either MError a
weaveJust (FailOrCmd ReqUI -> Either MError ReqUI)
-> m (FailOrCmd ReqUI) -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (FailOrCmd ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
m (FailOrCmd ReqUI)
automateToggleHuman
  AutomateBack -> m (Either MError ReqUI)
forall (m :: * -> *). MonadClientUI m => m (Either MError ReqUI)
automateBackHuman

  ChooseItem dialogMode :: ItemDialogMode
dialogMode -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ItemDialogMode -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
ItemDialogMode -> m MError
chooseItemHuman ItemDialogMode
dialogMode
  ChooseItemProject ts :: [TriggerItem]
ts -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [TriggerItem] -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
[TriggerItem] -> m MError
chooseItemProjectHuman [TriggerItem]
ts
  ChooseItemApply ts :: [TriggerItem]
ts -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [TriggerItem] -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
[TriggerItem] -> m MError
chooseItemApplyHuman [TriggerItem]
ts
  PickLeader k :: Int
k -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Int -> m MError
pickLeaderHuman Int
k
  PickLeaderWithPointer -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m MError
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m MError
pickLeaderWithPointerHuman
  MemberCycle direction :: Direction
direction -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Direction -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Direction -> m MError
memberCycleHuman Direction
direction
  MemberCycleLevel direction :: Direction
direction -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Direction -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Direction -> m MError
memberCycleLevelHuman Direction
direction
  SelectActor -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
selectActorHuman
  SelectNone -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
selectNoneHuman
  SelectWithPointer -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m MError
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m MError
selectWithPointerHuman
  Repeat n :: Int
n -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError (m () -> m (Either MError ReqUI))
-> m () -> m (Either MError ReqUI)
forall a b. (a -> b) -> a -> b
$ Int -> m ()
forall (m :: * -> *). MonadClientUI m => Int -> m ()
repeatHuman Int
n
  RepeatLast n :: Int
n -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError (m () -> m (Either MError ReqUI))
-> m () -> m (Either MError ReqUI)
forall a b. (a -> b) -> a -> b
$ Int -> m ()
forall (m :: * -> *). MonadClientUI m => Int -> m ()
repeatLastHuman Int
n
  Record -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
recordHuman
  AllHistory -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
allHistoryHuman
  LastHistory -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
lastHistoryHuman
  MarkVision -> m ()
forall (m :: * -> *). MonadClientUI m => m ()
markVisionHuman m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  MarkSmell -> m ()
forall (m :: * -> *). MonadClientUI m => m ()
markSmellHuman m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  MarkSuspect -> m ()
forall (m :: * -> *). MonadClient m => m ()
markSuspectHuman m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  MarkAnim -> m ()
forall (m :: * -> *). MonadClient m => m ()
markAnimHuman m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  OverrideTut -> m ()
forall (m :: * -> *). MonadClientUI m => m ()
overrideTutHuman m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  SettingsMenu -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
settingsMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  ChallengeMenu -> (KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
(KM -> HumanCmd -> m (Either MError ReqUI))
-> m (Either MError ReqUI)
challengeMenuHuman KM -> HumanCmd -> m (Either MError ReqUI)
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
KM -> HumanCmd -> m (Either MError ReqUI)
cmdSemInCxtOfKM
  PrintScreen -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
printScreenHuman

  Cancel -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). MonadClientUI m => m ()
cancelHuman
  Accept -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
acceptHuman
  DetailCycle -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
detailCycleHuman
  ClearTargetIfItemClear -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
clearTargetIfItemClearHuman
  ItemClear -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). MonadClientUI m => m ()
itemClearHuman
  MoveXhair v :: Vector
v k :: Int
k -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector -> Int -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Vector -> Int -> m MError
moveXhairHuman Vector
v Int
k
  AimTgt -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimTgtHuman
  AimFloor -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimFloorHuman
  AimEnemy -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimEnemyHuman
  AimItem -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimItemHuman
  AimAscend k :: Int
k -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Int -> m MError
aimAscendHuman Int
k
  EpsIncr b :: Direction
b -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError (m () -> m (Either MError ReqUI))
-> m () -> m (Either MError ReqUI)
forall a b. (a -> b) -> a -> b
$ Direction -> m ()
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Direction -> m ()
epsIncrHuman Direction
b
  XhairUnknown -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m MError
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m MError
xhairUnknownHuman
  XhairItem -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m MError
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m MError
xhairItemHuman
  XhairStair up :: Bool
up -> MError -> Either MError ReqUI
forall a b. a -> Either a b
Left (MError -> Either MError ReqUI)
-> m MError -> m (Either MError ReqUI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> m MError
forall (m :: * -> *).
(MonadClient m, MonadClientUI m) =>
Bool -> m MError
xhairStairHuman Bool
up
  XhairPointerFloor -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
xhairPointerFloorHuman
  XhairPointerMute -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
xhairPointerMuteHuman
  XhairPointerEnemy -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
xhairPointerEnemyHuman
  AimPointerFloor -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimPointerFloorHuman
  AimPointerEnemy -> m () -> m (Either MError ReqUI)
forall (m :: * -> *). Monad m => m () -> m (Either MError ReqUI)
addNoError m ()
forall (m :: * -> *). (MonadClient m, MonadClientUI m) => m ()
aimPointerEnemyHuman

addNoError :: Monad m => m () -> m (Either MError ReqUI)
addNoError :: m () -> m (Either MError ReqUI)
addNoError cmdCli :: m ()
cmdCli = m ()
cmdCli m () -> m (Either MError ReqUI) -> m (Either MError ReqUI)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Either MError ReqUI -> m (Either MError ReqUI)
forall (m :: * -> *) a. Monad m => a -> m a
return (MError -> Either MError ReqUI
forall a b. a -> Either a b
Left MError
forall a. Maybe a
Nothing)