2012-09-18 4 views
7

나는 명령 행에서 여러 문자열을 사용하고 각각에 대해 조치를 수행하는 응용 프로그램에서 optparse-applicative 라이브러리를 사용하고 있습니다.optparse-applicative : 하나 이상의 인수가 필요합니다.

arguments Just 
    (metavar "EXPR" 
    & help "Expressions to render, in zero-based De Bruijn index notation") 

불행하게도,이 훨씬 이해가되지 않는 경우에도, 없이 인수 프로그램을 실행 할 수 있습니다 : 내 첫 번째 시도는이이었다. , 파서 먹는다을 --help 호출 할 때 :

내 두 번째 시도는 목록의 나머지 부분에 consing 별도로 첫 번째 인수를 구문 분석 포함 :이 일을해야

(:) <$> argument Just (metavar "EXPR") 
    <*> arguments Just (metavar "EXPR") 

,하지만하지 않았다 도움말 텍스트를 표시하는 대신이를 처리하고 처리합니다.

내 질문은 : 어떻게 적어도 하나의 인수가 필요 optparse 구성합니까?

답변

6

괜찮아요 – 저는 도서관 (Paolo Capriotti)의 저자에게 reported this issue입니다. 그는 대답 : 여기

문제는 arguments가 특별한 논리를 가지고 있다는 것입니다 :

  • 처음 인수로 시작 무시 '-'
  • 동의 '-'
  • 인수로 시작 동의 '-'다음에 '-'가 붙습니다.

주어진 경우, argumentsmany argument으로 구현됩니다. 와,

  • arguments1, 비어 있지 않은 인수 목록 : 우리가 다루는이 문제의 하나처럼 쉽게 일반적인 사용 사례를 만들기 위해 할 수있는 일

    처럼, 편의 빌더의 무리를 추가하는 것입니다 '-'

이 방법은 많은 인수가 '인수와 유사한 것 (의 특별한 처리없이를 -) 인수

  • argument', 같은 동작으로 시작하는 것을 무시하고, 1 개 인자를 분석하고, 일부 논쟁의 여지가있는 인수 nts1.

    더 나은 이름을위한 제안을 환영합니다. :)

  • 다른 말로하면, 그는 내가 설명한 것을 수행하기 위해 새로운 기능 arguments1을 추가했습니다. 이 기능은 버전 0.5부터 사용할 수 있습니다.

    그래서 지금 내 코드는 다음과 같습니다

    arguments1 Just 
        (metavar "EXPR" 
        <> help "Expressions to render, in zero-based De Bruijn index notation") 
    

    감사합니다, 파올로!

    +1

    fyi ... 버전 0.9.0에서'arguments'와'arguments1'는'many'와'some' 결합자를'argument'로 사용하기 위해 사용되지 않습니다. – ErikR

    +0

    추가 의견을 보내 주셔서 감사합니다. – drumfire

    +0

    @ErikR하지만'some'을 인자로 쓰면 기본적으로 유용한 도움말 메시지가 출력되지 않습니다. –

    관련 문제