aboutsummaryrefslogtreecommitdiff
path: root/hsm-readline/Hsm
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2025-07-02 15:06:35 +0200
committerPaul Oliver <contact@pauloliver.dev>2025-08-13 23:54:10 +0000
commit8fe62292f18f4577303a868a8557b0486b218bcb (patch)
treecb9a9108eea479e932f37d03cf399b680e3886b2 /hsm-readline/Hsm
parent0be7f1274e0cb8406bd4262b86d5e2e9dda77d7a (diff)
Code now uses `effectful` to manage side-effects
Diffstat (limited to 'hsm-readline/Hsm')
-rw-r--r--hsm-readline/Hsm/Readline.hs50
1 files changed, 0 insertions, 50 deletions
diff --git a/hsm-readline/Hsm/Readline.hs b/hsm-readline/Hsm/Readline.hs
deleted file mode 100644
index 8a0c232..0000000
--- a/hsm-readline/Hsm/Readline.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module Hsm.Readline
- ( readline
- , allocateReadline
- ) where
-
-import Control.IO.Region (Region, alloc_)
-import Data.Text (Text, pack)
-import Data.Typeable (Proxy(Proxy), Typeable, typeRep)
-import Hsm.Log qualified as L
-import System.Console.Haskeline qualified as H
-import System.Console.Haskeline.IO qualified as H
-import Text.Read (readEither)
-
-logMsg :: Text -> IO ()
-logMsg = L.logMsg ["readline"]
-
-readline ::
- forall a. (Read a, Show a, Typeable a)
- => H.InputState
- -> IO (Maybe a)
-readline handle = do
- logMsg $ "Expecting value of type " <> pack (show $ typeRep $ Proxy @a)
- valueMaybe <- queryInput
- maybe (return Nothing) parseValueStr valueMaybe
- where
- queryInput =
- H.queryInput handle
- $ H.handleInterrupt (return Nothing)
- $ H.withInterrupt
- $ H.getInputLine "% "
- parseValueStr valueStr =
- case readEither @a valueStr of
- Right commandValue -> do
- logMsg $ "Parsed value " <> pack (show commandValue)
- return $ Just commandValue
- Left err -> do
- logMsg $ pack err
- readline handle
-
-allocateReadline :: Region -> IO H.InputState
-allocateReadline region = alloc_ region initializeInput cancelInput
- where
- initializeInput = do
- logMsg "Initializing input with default settings"
- H.initializeInput H.defaultSettings
- cancelInput handle = do
- logMsg "Cancelling input"
- H.cancelInput handle