 → MaybeT m Pos
parseShortcutPos xs = maybe e pure (lookupR xs posAndVkString <|> parseString xs)
  where e = tellMaybeT ["unknown position ‘" ⊕ xs ⊕ "’"]

parseCapslock ∷ Logger m ⇒ String → MaybeT m Bool
p
parseScancode ∷ Logger m ⇒ String → MaybeT m Pos
parseScancode xs = maybe e pure (readMaybe ('0':'x':xs) >>= (`lookupR` posAndScancode))
  where e = tellMaybeT ["unknown position ‘" ⊕ xs ⊕ "’"]
parseScancode xs = maybe e pure (readMaybe ('0':'x':xs) >>= (`lookupR` posAndScancode))
  where e = tellMaybeT ["unknown position ‘" ⊕ xs ⊕ "’"]