당신이 묘사 한 것을 감안할 때 나는 두 가지 옵션이 있다고 생각합니다. 이에서
options :: [OptDescr (String, String)]
options = [Option ['a'] ["alpha"] (ReqArg (\a -> ("alpha", a)) "empty") "",
Option ['b'] ["beta"] (ReqArg (\a -> ("beta", a)) "empty") "",
Option ['g'] ["gamma"] (ReqArg (\a -> ("gamma", a)) "empty") ""]
main = do
args <- getArgs
let (opts, nonopts, errs) = getOpt Permute options args
putStrLn $ show opts
, A : 두 가지 중, 나는 사전에 변환하는 가장 쉬운 것이라고 말할 것입니다,하지만 튜플로 변환하는 작업 만
그래서 조금 서투른 것,이 정의를 가지고 몇 가지 예제 출력은 다음과 같습니다 :
[("beta","b"),("alpha","a")]
[("alpha","a"),("gamma","g"),("beta","b")]
등등. 명령 행에서와 같은 순서. 하지만 위에서 설정 한 방식으로 인해 기본적으로 연관 목록이 있으므로 ... 특히 알파 (alpha, beta, gamma) 값을 가진 튜플을 원한다면 가장 좋은 옵션은 ...
(lookup "alpha" opts, lookup "beta" opts, lookup "gamma" opts)
당신은 결과 데이터 유형 것 일 (아마도 문자열, 아마도 문자열, 아마도 문자열), "알파", "베타"및 "감마"의 순서이다.
많은 커맨드 라인 파싱 패키지 중 하나를 hackage에서 사용하는 것을 고려 했습니까? –
@NathanHowell 나는 주문 주문으로 GetOpt를 사용하고있다. – jdevelop
'cmdargs'와'optparse-applicative'와 같은 패키지는 레코드 필드를 채운다. 커맨드 라인에서 인수의 순서를 무시한다. GetOpt의 대안으로 이들 중 하나 또는 둘 다를 시도해 볼 수도 있습니다. –