Using many threads can be a good way to structure GUI programs. Some things that are tricky to do using traditional event loop techniques become easy when using threads. Haskell has excellent support for using multiple threads so it ought to be a natural fit; to do multi-threaded GUI programming in Haskell. However there are some issues and limitations with the current threading support.
This article demonstrates a practical approach to creating multi-threaded GUIs with Gtk2Hs and tries to explain the issues and limitations.