Question

Le programme WXHASKELL habituel ressemble à

main = do 
        run gui

gui = do 
    .... 
    ....

GUI doit avoir le type IO a, Run a un type IO a -> IO (), il y a aussi certaines routines d'initialisation dans run.

Je suis à faire après:

 data AppGlobals = AG { ... some data  ... }
 type MApp a = StateT AppGlobals IO a

Mais dans ce cas, l'interface graphique doit avoir le type gui :: MApp AppGlobals. En raison de son type, il devient impossible d'utiliser la syntaxe habituelle de la monad liftIO Chaque fois que j'effectuez une action IO.

Y a-t-il une possibilité convaincante d'utiliser la monade d'État à Wxhaskell? Il n'est pas très convaincant de passer à chaque gestionnaire d'événements manuellement.

Était-ce utile?

La solution

Les programmes WXHASKELL que j'ai lus et écrits mettent l'État en variables.
http://wxhaskell.sourceforge.net/doc/graphics-Ui-wx-variable.html

Voici un bon aperçu: http://legacy.cs.uu.nl/daan/download/papers/wxhaskell.pdf

Et ils utilisent le démarrage plutôt que l'exécution.

Autres conseils

C'est possible en théorie, mais je l'ai trouvé lourd dans la pratique, comme vous l'avez fait. Mon propre code wxhaskell ressemble généralement à quelque chose comme je l'ai décrit dans l'article de blog référencé:

http://wewantarock.wordpress.com/2010/01/11/custom-ctretrols-in-wxhaskell-tart-3/

Vous pouvez utiliser les variables WXHASKELL, comme JA l'a suggéré, dans le même but, bien que je préfère le style plus explicite que j'ai utilisé dans le blog.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top