- Just (l, p) = p args a >>= \(a, args)->parseOpts (Flags fs) args a
-parseOpts _ args a = Ok (a, args)
+ Just (l, p) = p args a >>= \(a, args)->pOpts (Flags fs) args a
+pOpts (BinaryFlag yes no) args a
+ = pOpts (Positionals [("BOOL", \s v->
+ if (s == "True")
+ (Ok (yes v))
+ (if (s == "False")
+ (Ok (no v))
+ (Error ["Not True or False"])
+ )
+ )]) args a
+pOpts t args a = Ok (a, args)
+
+pHelp :: (Opt a) -> [String]
+pHelp (Positionals []) = []
+pHelp (Positionals [(i, _):ps]) = [i, " ":pHelp $ Positionals ps]
+pHelp (SubParsers ps) =
+ flatten
+ [[n, " ":pHelp opt] ++ ["\n"]
+ \\(n, opt)<-ps
+ ]
+pHelp (Flags fs) =
+ ["Flags\n"
+ :
+ flatten
+ [["--",f, "\n"]
+ \\(f, p)<-fs
+ ]
+ ]