私はHaskellの経験があまりなく、Gtk2Hを使い始めたばかりなので、これはばかげた質問かもしれません。
次のLineタイプを定義しています。
type Coord = (Int,Int)
type Line = (Coord,Coord)
Lineそして、にsのリストを描画する関数がありますDrawingArea。問題は、この関数がすべてのLinesを同時に描画することですが、2つの秒の間に少し遅れて一度に1つずつ描画したいと思いLineます。
render :: [Line] -> IO ()
render lines =
  do initGUI
     win <- windowNew
     windowSetTitle win "Animation"
     win `onDestroy` mainQuit
     can <- drawingAreaNew
     can `onSizeRequest` return (Requisition 400 400)
     can `onExpose` drawCanvas lines can
     but <- buttonNewWithLabel "Quit"
     but `onClicked` mainQuit
     hbox <- hBoxNew False 0
     boxPackStart hbox but PackRepel 150
     vbox <- vBoxNew False 5
     containerAdd vbox can
     containerAdd vbox hbox
     containerAdd win vbox
     widgetShowAll win
     mainGUI
この関数は、DrawingAreaが公開されたときに呼び出されます。
drawCanvas :: [Line] -> DrawingArea -> event -> IO Bool
drawCanvas lines can _evt =
  do dw <- widgetGetDrawWindow can
     drawWindowClear dw
     gc <- gcNew dw
     mapM_ (\(a,b) -> drawLine dw gc a b) lines
     return True
StateTまだ描画されていないものを追跡するためにを使用することを検討しましたLineが、アニメーションの実装方法がわかりません。widgetShowAll状態を変更してから毎回呼び出す場合でも、mainGUIが呼び出されるまでウィンドウは表示されません。  
drawCanvasどういうわけか描画を処理しながら、状態を継続的に更新する新しいスレッドを作成することは可能ですか?もしそうなら、誰かがそのような行動の例を教えてくれませんか?それとももっと良いアプローチがありますか?