我正在寻找一个使用 monad 来抽象命令行参数解析和帮助生成的库。我有以下相当明显的使用模式:
main = do
portOrSocket <- Args.run $ do
mbSocket <- Args.read $ Args.Arg "s" "socket" "Description"
mbPort <- Args.read $ Args.Arg "p" "port" "Description"
case mbSocket of
Just socket -> return $ Right socket
Nothing -> case mbPort of
Just port -> return $ Left port
Nothing -> return $ Left defaultPort
...
上面的代码包含处理解析、验证和使用生成所需的所有信息,而且 IMO 相当容易理解。不幸的是,在查看了 hackage 并检查了 cmdargs、cmdlib、parseargs、ReadArgs 等软件包之后,我没有找到任何与此相关的东西。但在深入实施之前,我想确保我没有错过任何事情。那么是否有一个图书馆可以利用类似的方法来解决这个问题?