Sto cercando una libreria che utilizzi una monade per astrarre il trambusto dell'argomentazione della riga di comando e della generazione di aiuto. Ho il seguente modello di utilizzo abbastanza ovvio in mente:Argomenti della riga di comando che leggono la libreria monad
main = do
portOrSocket <- Args.run $ do
mbSocket <- Args.read $ Args.Arg "s" "socket" "Description"
mbPort <- Args.read $ Args.Arg "p" "port" "Description"
case mbSocket of
Just socket -> return $ Right socket
Nothing -> case mbPort of
Just port -> return $ Left port
Nothing -> return $ Left defaultPort
...
Il codice di cui sopra ha tutte le informazioni necessarie per gestire l'analisi, la convalida e l'uso di generazione e IMO è abbastanza facile da comprendere. Sfortunatamente, dopo aver guardato attraverso l'hackage e aver controllato pacchetti come cmdargs, cmdlib, parseargs, ReadArgs, non ho trovato nulla da nessuna parte vicino a questo. Ma prima di immergermi nell'implementazione mi piacerebbe assicurarmi di non aver perso nulla. Quindi c'è una biblioteca che sfrutta un approccio simile al problema?
Hai provato 'optparse-applicative'? –
+1 per 'optparse-applicative'. È ottimo. – jtobin
Sembra che sarebbe quasi impossibile generare messaggi di aiuto automatici, se i parametri dipendono dai valori di altri parametri. Questo è probabilmente il motivo per cui _optparse-applicative_ utilizza Applicative. –