Skip to content

Sum type parsing #50

@MaxGabriel

Description

@MaxGabriel

Hi, I wanted to use a sum type in my command line parsing, and I came up with this:

data FrontendLanguage = Typescript | Swift deriving (Eq, Show, Read, Generic)

instance ParseField FrontendLanguage
instance ParseRecord FrontendLanguage
instance ParseFields FrontendLanguage

data Tasks
    = GenerateRoutes 
      { language :: FrontendLanguage <?> "Options are: Typescript, Swift"
      , frontendRepo :: FilePath <?> "Path to the root of the frontend repo"
      }
    deriving (Generic, Show)

instance ParseRecord Tasks

It works fine in the success case, though there isn't a specific error message if you provide an invalid sum type, just the generic help text.

Is this the best way to do this? I couldn't find anything in the documentation about this (could have missed it, though). If it is the best way, I'll submit a PR to document this use-case in the Haddocks if you'd like.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions