2013-10-12 2 views
5

J'essaie d'utiliser la fonction play de la bibliothèque Gloss, qui prend une fonction de gestion d'événements dont le premier argument est de type Event (selon le Hackage documentation). Je travaille sur Windows avec GHC 7.6.3 et Gloss 1.8.0.1.Comment accéder au type d'événement Graphics.Gloss dans Haskell?

Voici une esquisse de ce que je suis en train de faire:

import Graphics.Gloss 

type GameState = [Int] 

handleInputEvent :: Event -> GameState -> GameState 
handleInputEvent _ = id -- Just stubbed in for now 

L'erreur du compilateur est:

Not in scope: type constructor or class `Event' 

Si je vais dans WinGHCI et l'importation Graphics.Gloss et demande pour la signature de type de play, il ressemble à ceci:

play :: 
    Display 
    -> Color 
    -> Int 
    -> world 
    -> (world -> Picture) 
    -> (gloss-1.8.0.1:Graphics.Gloss.Internals.Interface.Event.Event 
     -> world -> world) 
    -> (Float -> world -> world) 
    -> IO() 

Je devine que cela a quelque chose à voir avec le nom Event se heurte à un autre module, et n'est donc pas importé de la même manière que les autres symboles de Gloss. Comment parler à Haskell à propos de Gloss 'Event?

Répondre

1

Si vous suivez le lien sur Hackage dans la signature de type play, et que Event est exporté de Graphics.Gloss.Interface.Pure.Game, il vous suffit d'importer ce module.

+0

Merci beaucoup! Je suis rentré chez moi ce soir et j'ai commencé à passer en revue le code de la bibliothèque Gloss, en important diverses choses, et je me suis rendu compte de cela. –

+0

Je n'ai pas compris la documentation, je suppose; la fonction de lecture est visible sans importer Graphics.Gloss.Interface.Pure.Game, donc j'ai supposé que le reste des symboles serait également visible. –

+1

@ user5014: Oui, en général, un module de niveau supérieur comme celui-ci devrait réexporter les définitions des types qu'il s'attend à ce que les clients utilisent. C'était probablement un oubli. –