سؤال

يبدو أن برنامج Wxhaskell المعتاد

main = do 
        run gui

gui = do 
    .... 
    ....

واجهة المستخدم الرسومية يجب أن يكون النوع IO a, ، تشغيل لديه نوع IO a -> IO (), ، هناك أيضا بعض إجراءات التهيئة في run.

أنا اتخاذ إجراء ما يلي:

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

ولكن في هذه الحالة يجب أن يكون لدى واجهة المستخدم الرسومية النوع gui :: MApp AppGlobals. وبعد نظرا لنوعها، يصبح من المستحيل استخدام بناء جملة IO Monad المعتاد، أقصد Ihave للاستخدام liftIO في كل مرة أعمل فيها إجراء IO.

هل هناك أي إمكانية عقدية لاستخدام ولاية موناد في Wxhaskell؟ انها ليست convinient جدا لتمرير الدولة إلى كل معالج الأحداث يدويا.

هل كانت مفيدة؟

المحلول

برامج 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/01/01/11/custom-controls-in-wxhaskell-part-3/

يمكنك استخدام متغيرات Wxhaskell، كما اقترح JA، لنفس الغرض، على الرغم من أنني أفضل النمط الأكثر صراحة التي استخدمتها في المدونة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top