2
如果我有以下幾種類型和解析器:哈斯克爾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
時纔有用。 我遇到問題,試圖改變Config
支持ňThing
■當,即:
data Config =
Config [ThingINeedMulitpleOf]
deriving (Show, Eq)
loadConfig = execParser $ info (Config <$> many thingParser) fullDesc
,但我現在不能再解析my-exe Thing1 --mode Mode1 Thing2 --mode Mode2
,給我的錯誤Invalid argument 'Thing1'
有趣的是,這適用於ThingINeedMulitpleOf
只包含一個字段的情況。