Множественные действия при рассмотрении дела в Haskell - PullRequest
1 голос
/ 16 мая 2010

Последний вопрос на вечер, я создаю основную функцию ввода моей программы на Haskell, и мне нужно проверить, какие аргументы введены в

поэтому я использую

args <- getArgs
case length args of
    0 -> putStrLn "No Arguments, exiting"
    otherwise -> { other methods here}

Существует ли разумный способ настройки других методов или в моих интересах написать функцию, в которую другой случай добавляется в основной?

Или есть еще лучшее решение вопроса о делах. Мне просто нужно взять одно имя.

Ответы [ 3 ]

10 голосов
/ 16 мая 2010
args <- getArgs
case length args of
    0 -> putStrLn "No Arguments, exiting"
    otherwise -> do
        other
        methods
        here
2 голосов
/ 16 мая 2010

Обработка аргумента должна быть выделена в отдельную функцию. Помимо этого, трудно обобщать, потому что есть много разных способов обработки аргументов. Вот несколько типов подписей, которые стоит рассмотреть:

exitIfNonempty :: [Arg] -> IO [Arg]                 -- return args unless empty
processOptions :: [Arg] -> (OptionRecord, [Arg])    -- convert options to record,
                                                    -- return remaining args
processOptionsBySideEffect :: [Arg] -> State [Arg]  -- update state from options,
                                                    -- return remaining args
callFirstArgAsCommand :: [(Name, [Arg] -> IO ())] -> [Arg] -> IO ()

И пара набросков реализаций (ни один из этого кода не был рядом с компилятором):

exitIfNonempty []   = putStrLen "No arguments; exiting"
exitIfNonempty args = return args

callFirstArgAsCommand commands [] = fail "Missing command name"
callFirstArgAsCommand commands (f:as) =
  case lookup f commands in 
    Just f -> f as
    Nothing -> fail (f ++ " is not the name of any command")

Я оставлю остальных на ваше воображение.

В моих же интересах написать функцию, к которой добавляется другой кейс в основной?

Да. Более того, вам следует создать библиотеку комбинаторов , которую можно легко вызывать для обработки аргументов командной строки для различных программ. Такие библиотеки, несомненно, уже существуют в Hackage , но это один из тех случаев, когда вам может быть проще свернуть свой собственный, чем изучать чужой API (и это определенно будет веселее).

0 голосов
/ 19 мая 2010

Просмотр шаблонов может быть полезным здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...