Статут и WX GUI сосуществование
-
19-09-2019 - |
Вопрос
обычная программа 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, для той же цели, хотя я предпочитаю более явный стиль, который я использовал в блоге.