 ⇒ m Int
shiftstate = do
    [i] ← readLine
    maybe (fail $ "‘" ⊕ show i ⊕ "’ is not an integer") pure (readMaybe i)

klcKeys ∷ (Logger m, Parser m) ⇒ m [Key]
klcKeys 
shiftstates ∷ (Parser m, MonadFail m) ⇒ m [Shiftstate]
shiftstates = do
    ["SHIFTSTATE"] ← readLine
    map shiftstateFromWinShiftstate <$> many (try shiftstate)
shiftstates = do
    ["SHIFTSTATE"] ← readLine
    map shiftstateFromWinShiftstate <$> many (try shiftstate)