Einfachere alternative Bibliotheken zu Reactive? (Haskell)

Ich lerne Haskell und versuche, ereignisgesteuerte Programme zu schreiben.

Der folgende Code stammt aus dem Tutorial:http://www.haskell.org/haskellwiki/OpenGLTutorial2

main = do
  (progname,_) <- getArgsAndInitialize
  initialDisplayMode $= [DoubleBuffered]
  createWindow "Hello World"
  reshapeCallback $= Just reshape
  angle <- newIORef (0.0::GLfloat)          -- 1
  delta <- newIORef (0.1::GLfloat)          -- 2
  position <- newIORef (0.0::GLfloat, 0.0)  -- 3
  keyboardMouseCallback $= Just (keyboardMouse delta position)
  idleCallback $= Just (idle angle delta)
  displayCallback $= (display angle position)
  mainLoop

Die Zustände sind in gespeichertIORefs, wodurch es wie eine imperative Sprache aussieht.

Ich habe gehört, dass es andere APIs gibtGraphics.UI.GLUT, (z.B.Reactive), aber es sieht sehr kompliziert aus.

Mein Ansatz ist, dass die lib eine Funktion bereitstelltrunEventHandlerund der Benutzer schreibt ahandler das akzeptiert Liste vonEvents und konvertieren sie zuIO ().

handler :: [Event] -> IO ()
runEventHandler :: ( [Event] -> IO () ) -> IO ()

Und dasmain Funktion sollte so aussehen:

main = runEventHandler handler

Gibt es solche Bibliotheken?

Ich implementiere derzeit eine mit Multithreading, aber ich mache mir Sorgen, dass es in der Leistung schlecht sein könnte ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage