WithConfig
  _
  Nothing
  (Check
     Nothing
     False
     (fromList [])
     _
     (Alt
        (Check
           Nothing
           False
           (fromList [])
           _
           (Setting
              Nothing
              (Setting
                 [ DashedLong ('c' :| "onfig-file") ]
                 [ _ ]
                 False
                 Nothing
                 True
                 (Just
                    (EnvVarSetting
                       { envVarSettingVar = "CONFIG_FILE"
                       , envVarSettingAllowPrefix = True
                       } :|
                       []))
                 Nothing
                 Nothing
                 []
                 False
                 (Just "FILE_PATH")
                 (Just "Path to the configuration file")
                 (Just _)
                 (fromList []))))
        (Check Nothing False (fromList []) _ (Pure _))))
  (Commands
     Nothing
     Nothing
     [ Command
         "top"
         "command without subcommands"
         (Check
            Nothing
            True
            (fromList [])
            _
            (Setting
               Nothing
               (Setting
                  [ DashedLong ('n' :| "ame") ]
                  [ _ ]
                  False
                  Nothing
                  True
                  (Just
                     (EnvVarSetting
                        { envVarSettingVar = "NAME" , envVarSettingAllowPrefix = True } :|
                        []))
                  (Just
                     (ConfigValSetting
                        ("name" :| [])
                        BimapCodec
                        _
                        _
                        (EitherCodec
                           PossiblyJointUnion
                           NullCodec
                           (BimapCodec _ _ (StringCodec Nothing))) :|
                        []))
                  Nothing
                  [ "john" ]
                  False
                  (Just "NAME")
                  (Just "name")
                  Nothing
                  (fromList []))))
     , Command
         "sub"
         "command with subcommands"
         (Ap
            (Commands
               Nothing
               Nothing
               [ Command "a" "A" (Pure _) , Command "b" "B" (Pure _) ])
            (Commands
               Nothing
               (Just "c")
               [ Command "c" "C" (Pure _) , Command "d" "D" (Pure _) ]))
     ])