It should be possible to implement commands using sumtypes. ``` haskell data GitOptions = Push { force :: Bool } | Fetch { branch :: Maybe String } ``` It's a bit tricky to get global options right in that case, but I think it should be doable.