2013-10-12 11 views
5

Sto cercando di usare la funzione della biblioteca Gloss play, che prende una funzione di gestione degli eventi il ​​cui primo argomento è di tipo Event (secondo il Hackage documentation). Sto lavorando su Windows con GHC 7.6.3 e Gloss 1.8.0.1.Come accedere al tipo di evento Graphics.Gloss in Haskell?

Ecco un abbozzo di quello che sto cercando di fare:

import Graphics.Gloss 

type GameState = [Int] 

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

L'errore del compilatore è:

Not in scope: type constructor or class `Event' 

Se entro in WinGHCI e l'importazione Graphics.Gloss e chiedo per la tipo di firma play, sembra che questo:

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

sto indovinando questo ha qualcosa a che fare con il nome Event si scontrano con qualche altro modulo e quindi non viene importato nello stesso modo degli altri simboli di Gloss.

Come parlare con Haskell di Gloss 'Event?

risposta

1

Se si segue il collegamento su Hackage nella firma del tipo di play e si trova che Event viene esportato da Graphics.Gloss.Interface.Pure.Game, quindi semplicemente importare quel modulo.

+0

Grazie! Questa sera sono tornato a casa e ho iniziato a leggere il codice della libreria Gloss, importando varie cose, e l'ho capito. –

+0

Non ho capito la documentazione, immagino; la funzione play qui è visibile senza importare Graphics.Gloss.Interface.Pure.Game, quindi ho pensato che il resto dei simboli lì sarebbe anche visibile. –

+1

@ user5014: Sì, in genere un modulo di alto livello come questo dovrebbe ri-esportare le definizioni di tipi che si aspetta client di utilizzare. Questa era probabilmente una svista. –