나는 다음과 같은 유형 및 파서가있는 경우 :하스켈 optparse의-실용적 : 여러 필드를 레코드 목록을 구문 분석
data Mode =
Mode1
| Mode2
deriving (Show, Eq, Read)
data ThingINeedMulitpleOf =
Thing { _name :: String, _mode :: Mode }
deriving (Show, Eq)
thingParser :: Parser ThingINeedMulitpleOf
thingParser = Thing <$> strArgument (metavar "NAME")
<*> option auto (long "mode" <> metavar "MODE")
을 나는 다음과 같은 방법으로 파서 구축 :
data Config =
Config ThingINeedMulitpleOf ThingINeedMulitpleOf
deriving (Show, Eq)
loadConfig = execParser $ info (Config <$> thingParser <*> thingParser) fullDesc
을 그럼 난 성공적으로 my-exe Thing1 --mode Mode1 Thing2 --mode Mode2
을 구문 분석 할 수 있지만 정확히 두 가지만 원할 경우에만 유용합니다 Things
. NThing
의를 지원하기 위해 Config
을 변경하려고 할 때 내가 문제로 실행 해요 예 :
data Config =
Config [ThingINeedMulitpleOf]
deriving (Show, Eq)
loadConfig = execParser $ info (Config <$> many thingParser) fullDesc
하지만 난 이제 더 이상 흥미롭게도 나에게 오류 Invalid argument 'Thing1'
을 제공 my-exe Thing1 --mode Mode1 Thing2 --mode Mode2
구문 분석 할 수 없습니다, ThingINeedMulitpleOf
에 필드가 하나만있는 경우이 방법이 적용됩니다.