aboutsummaryrefslogtreecommitdiff
path: root/hsm-command
diff options
context:
space:
mode:
Diffstat (limited to 'hsm-command')
-rw-r--r--hsm-command/Hsm/Command/Command.hs5
-rw-r--r--hsm-command/Hsm/Command/Readline.hs23
2 files changed, 8 insertions, 20 deletions
diff --git a/hsm-command/Hsm/Command/Command.hs b/hsm-command/Hsm/Command/Command.hs
index 3b53287..53964c4 100644
--- a/hsm-command/Hsm/Command/Command.hs
+++ b/hsm-command/Hsm/Command/Command.hs
@@ -39,13 +39,10 @@ data Command
| Rotate Angle Speed Int
deriving (Binary, Generic, Read, Show)
-commandStream ::
- forall es. (Log :> es, Readline :> es)
- => S.Stream (Eff es) Command
+commandStream :: (Log :> es, Readline :> es) => S.Stream (Eff es) Command
commandStream =
S.mapMaybeM (parse . fromJust) $ S.takeWhile isJust $ S.repeatM readline
where
- parse :: String -> Eff es (Maybe Command)
parse string =
case readEither string of
Left err -> logAttention_ (pack err) >> return Nothing
diff --git a/hsm-command/Hsm/Command/Readline.hs b/hsm-command/Hsm/Command/Readline.hs
index 428ed50..1caa562 100644
--- a/hsm-command/Hsm/Command/Readline.hs
+++ b/hsm-command/Hsm/Command/Readline.hs
@@ -22,28 +22,19 @@ type instance DispatchOf Readline = Static S.WithSideEffects
newtype instance S.StaticRep Readline =
Readline H.InputState
-readline ::
- forall es. (Log :> es, Readline :> es)
- => Eff es (Maybe String)
+readline :: (Log :> es, Readline :> es) => Eff es (Maybe String)
readline = do
flushLogger
Readline hdl <- S.getStaticRep
- S.unsafeEff_ $ nextLine hdl
- where
- nextLine :: H.InputState -> IO (Maybe String)
- nextLine hdl =
- H.queryInput hdl
- $ H.handleInterrupt (return Nothing)
- $ H.withInterrupt
- $ H.getInputLine "% "
+ S.unsafeEff_
+ $ H.queryInput hdl
+ $ H.handleInterrupt (return Nothing)
+ $ H.withInterrupt
+ $ H.getInputLine "% "
runReadline :: (IOE :> es, Resource :> es) => Eff (Readline : es) a -> Eff es a
runReadline action = do
- handle <- snd <$> allocate istate H.cancelInput
+ handle <- snd <$> allocate (H.initializeInput settings) H.cancelInput
S.evalStaticRep (Readline handle) action
where
- settings :: H.Settings IO
settings = H.defaultSettings {H.historyFile = Just ".hsm_command_history"}
- --
- istate :: IO H.InputState
- istate = H.initializeInput settings