2011-03-13 18 views
8

Después qmake y mingw32-hacer de these instrucciones tiene éxito, y ejecuto runhaskell Setup.hs build, me sale el siguiente error:Se produjo un error durante la compilación de qtHaskell

[651 of 662] Compiling Qtc.Core.Attributes (Qtc\Core\Attributes.hs, dist\build\Qtc\Core\Attributes.o) 
Qtc\Core\Attributes.hs:584:13: 
Could not deduce (Qstt a (QDialogSc b)) 
    arising from a use of `slotReject'' 
from the context (Qstt a (QDialogSc b1)) 
    bound by the instance declaration 
    at Qtc\Core\Attributes.hs:582:10-52 
Possible fix: 
    add (Qstt a (QDialogSc b)) to the context of 
    the instance declaration 
    or add an instance declaration for (Qstt a (QDialogSc b)) 
In the expression: slotReject' 
In an equation for `reject'': reject' = slotReject' 
In the instance declaration for `QsaSlotReject a' 

el archivo Attributes.hs (línea 578 - 583):

class QsaSlotReject w where 
    slotReject', reject' :: (Qslot w (w ->()), (w ->())) 

instance (Qstt a (QDialogSc b)) => QsaSlotReject (a) where 
    slotReject' = (Qslot "reject()", \_ ->()) 
    reject' = slotReject' 

Medio Ambiente:

  • Windows 7
  • Haskell Plataforma 2011.2.0
  • SDK Qt 4,7

por cierto, me encontré con un fuera de la memoria dos veces en el proceso, pero supongo que eso no importa.

+1

Estoy aprendiendo inglés, y lo siento, no puedo usarlo bien. – SongPengpeng

Respuesta

9

El problema viene del hecho de que

data Qslot x f = Qslot String 

así que hay un poco de dificultad para inferir lo que x y f podría ser desde un punto dado de la forma Qslot "Bla, bla". Quizás ha habido un cambio sutil en el mecanismo de inferencia que usa GHC desde que la última versión de qthaskell se lanzó el otoño pasado.

En cualquier caso, parece que compilar, con algunas advertencias curiosos, y los ejemplos funciona, si se reemplaza

instance (Qstt a (QDialogSc b)) => QsaSlotReject (a) where 
    slotReject' = (Qslot "reject()", \_ ->()) 
    reject' = slotReject' 

con

instance (Qstt a (QDialogSc b)) => QsaSlotReject (a) where 
    slotReject' = (Qslot "reject()", \_ ->()) 
    reject' = (Qslot "reject()", \_ ->()) 

De esta forma GHC does't tiene que preguntarse bastante tanto ...

Debe haber algo que pueda hacer las cosas más precisas. No sé si el eta reduce las advertencias que comienzan a aparecer sistemáticamente más tarde tienen que ver con esta línea.

+0

Gracias. Salvaste mi día... –

Cuestiones relacionadas