2012-07-07 4 views
0

나는 (예를 들어 5 개) 명령 행 옵션이 적고 튜플로 변환하려고한다. 문제는 그것들이 올바른 순서로 나타나기를 기대하기 때문에 패턴 일치를 사용하여 튜플을 목록에서 쉽게 만들 수 있지만 실생활 옵션은 무작위 순서로 제공 될 수 있으므로 목록 머리가 포함되어 있는지 나는 모른다 상세 옵션 또는 로그 파일 이름?리스트를 튜플로 변환하기

나는 연속 통과 스타일을 사용하는 방법을 생각해 보았지만 유용한 것은 아무 것도 없습니다.

그럴 수 있습니까?

예상되는 순서대로 목록을 "정렬"할 수 있다고 생각하지만 잘 보입니다.

또한 튜플을 없애고 데이터 레코드를 만들 수 있습니다. 그러나 여전히 특성 유형을 확인하고 레코드의 올바른 필드를 설정해야합니다. 아직도 많은 타이핑.

+0

많은 커맨드 라인 파싱 패키지 중 하나를 hackage에서 사용하는 것을 고려 했습니까? –

+0

@NathanHowell 나는 주문 주문으로 GetOpt를 사용하고있다. – jdevelop

+1

'cmdargs'와'optparse-applicative'와 같은 패키지는 레코드 필드를 채운다. 커맨드 라인에서 인수의 순서를 무시한다. GetOpt의 대안으로 이들 중 하나 또는 둘 다를 시도해 볼 수도 있습니다. –

답변

1

당신이 묘사 한 것을 감안할 때 나는 두 가지 옵션이 있다고 생각합니다. 이에서

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) 

당신은 결과 데이터 유형 것 일 (아마도 문자열, 아마도 문자열, 아마도 문자열), "알파", "베타"및 "감마"의 순서이다.

관련 문제