|
1 | 1 | module Repl (runRepl) where |
2 | 2 |
|
3 | 3 | import Control.Applicative ((<|>)) |
| 4 | +import Data.Char (isSpace) |
4 | 5 | import Data.List (isPrefixOf) |
5 | 6 | import Data.Map.Strict (Map, (!)) |
6 | 7 | import qualified Data.Map.Strict as Map |
@@ -33,23 +34,28 @@ data ReplCommand |
33 | 34 | | ReplArity String |
34 | 35 | deriving (Eq, Show) |
35 | 36 |
|
| 37 | +splitFirstWord :: String -> (String, String) |
| 38 | +splitFirstWord = break isSpace . dropWhile isSpace |
| 39 | + |
36 | 40 | parseReplCommand :: String -> ReplCommand |
37 | 41 | 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) |
| 42 | + case splitFirstWord input of |
| 43 | + ("\\Q", _) -> ReplQuit |
| 44 | + ("\\Quit", _) -> ReplQuit |
| 45 | + ("\\H", _) -> ReplHelp |
| 46 | + ("\\Help", _) -> ReplHelp |
| 47 | + ("\\Mode", rest) -> |
| 48 | + case splitFirstWord rest of |
| 49 | + ("all", _) -> ReplMode AllValues |
| 50 | + ("first", _) -> ReplMode FirstValue |
| 51 | + ("last", _) -> ReplMode LastValue |
| 52 | + ("count", _) -> ReplMode CountValues |
| 53 | + ("exists", _) -> ReplMode CheckExistence |
| 54 | + _ -> ReplShowMode |
| 55 | + ("\\Limit", rest) -> ReplLimit rest |
| 56 | + ("\\Input", rest) -> ReplInput rest |
| 57 | + ("\\Info", rest) -> ReplInfo rest |
| 58 | + ("\\Arity", rest) -> ReplArity rest |
53 | 59 | _ -> ReplEval input |
54 | 60 |
|
55 | 61 | replCommandStrings :: [String] |
|
0 commit comments