2011-04-01 5 views
2

J'ai l'extrait suivant, qui compile bien, mais quand j'essaie de l'exécuter, je reçois une erreur de cmdargs. *** Exception: System.Console.CmdArgs.Implicit, unexpected flag (edit): Main.Sel. Cela fonctionne si je change le Sel en Int, mais dans mon cas d'utilisation réel, j'aimerais que l'application de type différencie les sélections de Ints.Haskell, cmdargs et newtypes

Je peux le réparer en utilisant Int avec cmdargs et après avoir vérifié les arguments qui le transforment en Sel, mais je pense que c'est une solution sous-optimale.

{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving #-} 
import System.Console.CmdArgs 
import System.Console.CmdArgs.Default 

newtype Sel = Sel Int deriving (Num, Real, Integral, Show, Read, Data, Typeable, Enum, Eq, Ord, Default) 

data Foo = Foo { 
    edit :: Sel 
    } deriving (Show, Read, Data, Typeable) 

foo = Foo { 
    edit = def 
    } 
main = do 
    a <- cmdArgs foo 
    print a 

Répondre

9

Il est suboptimale en effet, et je l'ai soulevé un bug pour suivre l'ajout de cette fonction: http://code.google.com/p/ndmitchell/issues/detail?id=422

je pourrais avoir le temps de travailler sur ce week-end, il ne devrait pas être trop dur (mais dépend combien plus loin que newtypes je veux aller). (Pour le contexte, je l'ai écrit cmdargs)

Mise à jour: I vient de publier cmdargs 0.6.9 sur Hackage qui soutient newtypes comme demandé dans cette question.