Pregunta

El programa habitual de Wxhaskell se parece

main = do 
        run gui

gui = do 
    .... 
    ....

GUI debe tener tipo IO a, ejecutar tiene tipo IO a -> IO (), también hay algunas rutinas de inicialización en run.

Estoy tratando de hacer lo siguiente:

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

Pero en este caso la GUI debe tener tipo gui :: MApp AppGlobals. Debido a su tipo, se hace imposible usar la sintaxis de mónada IO habitual, quiero decir que tengo que usar liftIO Cada vez que realizo la acción de IO.

¿Hay alguna posibilidad convincente de usar la mónada estatal en Wxhaskell? No es muy convincente pasar el estado a cada manejador de eventos manualmente.

¿Fue útil?

Solución

Los programas WXHaskell que he leído y escrito simplemente lleven al estado a variables.
http://wxhaskell.sourceforge.net/doc/graphics-ui-wx-variable.html

Aquí hay una buena descripción: http://legacy.cs.uu.nl/daan/download/papers/wxhaskell.pdf

Y usan inicio en lugar de correr.

Otros consejos

Es posible en teoría, pero he encontrado que es engorroso en la práctica, como lo hiciste tú. Mi propio código wxhaskell generalmente se ve como lo describí en el artículo del blog referenciado:

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

Puede usar las variables WXHaskell, como JA sugirió, para el mismo propósito, aunque prefiero el estilo más explícito que utilicé en el blog.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top