Skip to content

Commit e49beaa

Browse files
committed
🐛
1 parent 395b56a commit e49beaa

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jobs:
55
runs-on: ubuntu-latest
66
strategy:
77
matrix:
8-
ghc: ['9.0.2', '9.4.8', '9.10.1', '9.12.2']
8+
ghc: ['9.0.2', '9.6.7', '9.10.2', '9.12.2']
99
steps:
1010
- uses: actions/checkout@v4
1111
- uses: haskell-actions/setup@v2

app/Repl.hs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module Repl (runRepl) where
22

33
import Control.Applicative ((<|>))
4+
import Control.Arrow (second)
5+
import Data.Char (isSpace)
46
import Data.List (isPrefixOf)
57
import Data.Map.Strict (Map, (!))
68
import qualified Data.Map.Strict as Map
@@ -33,23 +35,28 @@ data ReplCommand
3335
| ReplArity String
3436
deriving (Eq, Show)
3537

38+
splitFirstWord :: String -> (String, String)
39+
splitFirstWord = second (dropWhile isSpace) . break isSpace . dropWhile isSpace
40+
3641
parseReplCommand :: String -> ReplCommand
3742
parseReplCommand input =
38-
case words input of
39-
("\\Q" : _) -> ReplQuit
40-
("\\Quit" : _) -> ReplQuit
41-
("\\H" : _) -> ReplHelp
42-
("\\Help" : _) -> ReplHelp
43-
("\\Mode" : "all" : _) -> ReplMode AllValues
44-
("\\Mode" : "first" : _) -> ReplMode FirstValue
45-
("\\Mode" : "last" : _) -> ReplMode LastValue
46-
("\\Mode" : "count" : _) -> ReplMode CountValues
47-
("\\Mode" : "exists" : _) -> ReplMode CheckExistence
48-
("\\Mode" : _) -> ReplShowMode
49-
("\\Limit" : rest) -> ReplLimit (unwords rest)
50-
("\\Input" : rest) -> ReplInput (unwords rest)
51-
("\\Info" : rest) -> ReplInfo (unwords rest)
52-
("\\Arity" : rest) -> ReplArity (unwords rest)
43+
case splitFirstWord input of
44+
("\\Q", _) -> ReplQuit
45+
("\\Quit", _) -> ReplQuit
46+
("\\H", _) -> ReplHelp
47+
("\\Help", _) -> ReplHelp
48+
("\\Mode", rest) ->
49+
case splitFirstWord rest of
50+
("all", _) -> ReplMode AllValues
51+
("first", _) -> ReplMode FirstValue
52+
("last", _) -> ReplMode LastValue
53+
("count", _) -> ReplMode CountValues
54+
("exists", _) -> ReplMode CheckExistence
55+
_ -> ReplShowMode
56+
("\\Limit", rest) -> ReplLimit rest
57+
("\\Input", rest) -> ReplInput rest
58+
("\\Info", rest) -> ReplInfo rest
59+
("\\Arity", rest) -> ReplArity rest
5360
_ -> ReplEval input
5461

5562
replCommandStrings :: [String]

0 commit comments

Comments
 (0)