Вопрос

обычная программа Wxhaskell выглядит как

main = do 
        run gui

gui = do 
    .... 
    ....

GUI должен иметь тип IO a, run имеет тип IO a -> IO (), также есть некоторые процедуры инициализации в run.

Я Тринг, чтобы сделать следующее:

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

Но в этом случае графический интерфейс должен иметь тип gui :: MApp AppGlobals. Анкет Из -за своего типа становится невозможным использовать обычный синтаксис IO Monad, я имею в виду, что я использую liftIO Каждый раз, когда я выполняю действие.

Есть ли какая -то убедительная возможность использовать государственную монаду в Wxhaskell? Не очень убедительно передать состояние каждому обработчику событий вручную.

Это было полезно?

Решение

Программы Wxhaskell, которые я прочитал и написал, просто заставили государство в переменные.
http://wxhaskell.sourceforge.net/doc/graphics-ui-wx-variable.html

Вот хороший обзор: http://legacy.cs.uu.nl/daan/download/papers/wxhaskell.pdf

И они используют начало, а не бегают.

Другие советы

Это возможно в теории, но я обнаружил, что это громоздко на практике, как и вы. Мой собственный код Wxhaskell обычно выглядит как я описал в ссылке на статью в блоге:

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

Вы можете использовать переменные wxhaskell, как предложил JA, для той же цели, хотя я предпочитаю более явный стиль, который я использовал в блоге.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top