2010-07-11 10 views
14

tengo datos definidos como el ss .:No se puede derivar una instancia para Mostrar datos que contienen UTCTime

import Data.Time.Clock 

data D = D { ..., 
      someDate :: UTCTime, 
      ... } 
     deriving (Eq, Show) 

Cuando compilo, me sale el ff. de error:

No instance for (Show UTCTime) 
    arising from the 'deriving' clause of a data type declaration 
       at ... 

Ya tengo el paquete de tiempo-1.1.3 que ya debería tener este caso de acuerdo con documentation. Mi versión de GHC es 6.8.2.

+0

Use ghc-pkg para verificar que esté seleccionando la versión correcta. –

+0

Sí, 1.1.3 está siendo recogido. Ejecuté "ghc-pkg última vez". También compilé con la opción "-v" y vi que el compilador ocultaba la versión anterior a favor de 1.1.3. –

+0

Una búsqueda en Google de 'instancia muestra" UTCTime "' revela que está en 'Data.Time.LocalTime'. Esta técnica puede ser útil para problemas similares en el futuro. –

Respuesta

28

No importe cada pieza del paquete Data.Time por separado. Está diseñado para importar solo Data.Time, y eso atraerá casi todo lo que se usa comúnmente. Incluyendo la instancia Show para UTCTime.

Si no desea que gran desorden espacio de nombres, la importación sólo los símbolos que necesita:

import Data.Time (UTCTime, getCurrentTime) 

o cualquier otra cosa. De todos modos, es una buena idea: lo protege contra los conflictos de nombres más adelante si la biblioteca se actualiza y comienza a usar un nombre que ya tiene definido.

3

La documentación se encuentra. Si nos fijamos en la fuente de Data.Time.Clock.UTC, simplemente no hay instancia Show para UTCTime.

Editar:

Como newacct amablemente señaló, hay una instancia huérfanos para Show UTCTime en Data.Time.LocalTime.LocalTime, por lo que si importa eso, su código funcionará.

+3

está en Data.Time.LocalTime.LocalTime though: http://hackage.haskell.org/packages/archive/time/1.1.3/doc/html/src/Data-Time-LocalTime-LocalTime.html – newacct

+0

He enviado un correo electrónico el mantenedor del paquete para aclarar. Publicaré aquí tan pronto como reciba una respuesta. –

+1

Es una instancia huérfana definida en Data.Time.LocalTime.LocalTime. Importar Data.Time le dará al constructor en Data.Time.UTC y la instancia Show en Data.Time.LocalTime.LocalTime. –

Cuestiones relacionadas