2010-03-11 25 views
1

programme habituel wxHaskell ressembleStateT et WX IUG coexistance

main = do 
     run gui 

gui = do 
    .... 
    .... 

IUG doit être de type IO a, exécutez est de type IO a -> IO(), il y a aussi des routines d'initialisation dans run.

Je suis Tring faire ce qui suit:

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

Mais dans ce cas IUG doit avoir un type gui :: MApp AppGlobals. En raison de son type, il devient impossible d'utiliser la syntaxe IO monad habituelle, je veux dire que je dois utiliser liftIO chaque fois que j'effectue une action IO.

Existe-t-il une possibilité pratique d'utiliser la monade d'état dans wxHaskell? Il n'est pas très pratique de passer l'état à chaque gestionnaire d'événement manuellement.

Répondre

0

C'est possible en théorie, mais je l'ai trouvé difficile à mettre en 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-controls-in-wxhaskell-part-3/

Vous pouvez utiliser des variables wxHaskell, comme ja a suggéré, dans le même but, même si je préfère le style plus explicite je en le blog.