problem combining partially overlapping parsers with Alternative
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start by compiling and running the supplied Haskell program, then inspect Options.Applicative.Internal and the Alternative behavior for the two parser orderings. Done means both orderings handle ./foo a, ./foo --bar a b, and ./foo b --bar a without an incorrect Missing: --bar ARG failure.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The test program below prints this --help
Usage: foo ([--bar ARG] [string] | [string])
And "./foo --bar a b" works. However:
joey@darkstar:~>./foo a
Missing: --bar ARG
Seems that in bar <|> foo, the bar parser can fail in a way that makes it never try the
foo parser, which would succeed if it were tried.
If it's changed to foo <|> bar, the example above works, as does "./foo --bar a b" , so that version of the program works ok. Except, "./foo b --bar a" does not work; normally the bar
parser would accept that, but now the foo parser fails in a way that makes the bar parser not work.
import Options.Applicative
import Options.Applicative.Internal
data Foo = Foo [String] | Bar String String
deriving (Show)
parser :: Parser Foo
parser = bar <|> foo
where
foo = Foo <$> many (argument str ( metavar ""))
bar = Bar <$> strOption (long "bar") <*> argument str (metavar "dir")
main = print =<< execParser opts
where
opts = info (parser <**> helper)
( fullDesc
<> progDesc "testcase"
<> header "testcase"
)
- Lingua principale
- Haskell
- Stelle
- 957
- Fork
- 124
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pcapriotti/optparse-applicative
-
Allow QuickCheck 2.17Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
pcapriotti/optparse-applicative#524 · 2 commenti ·
-
Allow replacing commands with metavar when using parserOptionGroupForse già presa @tbidne l’ha presa 86 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
pcapriotti/optparse-applicative#523 · 1 commento · 1 reazione ·
-
Nushell CompletionsAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
pcapriotti/optparse-applicative#513 · 4 commenti ·
Tutte le issue di pcapriotti/optparse-applicative
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
IntersectMBO/cardano-ledger#6276 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenZeppelin/canton-contracts#92 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
hasura/graphql-engine#10954 ·
I maintainer di solito rispondono entro 1 giorno