2011-12-21 12 views
11

Sto creando un semplice sito web usando yesod.Come utilizzare UTCTime in yesod senza errori di modulo nascosti?

Stava funzionando fino a quando non ho aggiunto un campo di tipo UTCTime al mio modello di database.

inizialmente ho ottenuto un errore che suggerisce aggiungo "time-1.2.0.3" per il mio file cabala, così ho fatto e ora ho più o meno lo stesso errore, senza il suggerimento:

Model.hs:6:8: 
    Could not find module `Data.Time.Clock.UTC': 
     it is a hidden module in the package `time-1.2.0.3' 
     Use -v to see a list of the files searched for. 

GHC Comando linea generata dalla cabala è:

"C:\Program Files (x86)\Haskell Platform\2011.2.0.1\bin\ghc.exe" --make -o dist\build\lpi\lpi.exe -hide-all-packages -fbuilding-cabal-package -package-conf dist\package.conf.inplace -i -idist\build\lpi\lpi-tmp -i. -idist\build\autogen -Idist\build\autogen -Idist\build\lpi\lpi-tmp -optP-DPRODUCTION -optP-include -optPdist\build\autogen\cabal_macros.h -odir dist\build\lpi\lpi-tmp -hidir dist\build\lpi\lpi-tmp -stubdir dist\build\lpi\lpi-tmp -package-id base-4.3.1.0-f520cd232cc386346843c4a12b63f44b -package-id bytestring-0.9.1.10-cd85f14e02463c02ba4c77d7adcdb54f -package-id clientsession-0.7.3.6-70ebb09e2b4c14267f1463cef3c932ea -package-id hamlet-0.10.5-1bacb5fe791e5cc9e28c8cf9f07c06e2 -package-id hjsmin-0.0.14-a1d374204877c150b681896452f205f4 -package-id mime-mail-0.4.1.0-05d76f10c6f18f7178113a6d760f371a -package-id monad-control-0.3.1-092d8fe82727181557b850f795f847bc -package-id persistent-0.6.4.3-6e59b956a206ce4f4a9296367507c2b8 -package-id persistent-sqlite-0.6.2.1-d32462e51baa09b53b6fd83dae922fc7 -package-id shakespeare-css-0.10.4-f8e17e4528d3a37edee74b13441720de -package-id shakespeare-js-0.10.3-dfec6b68f60671528332da06c9799659 -package-id shakespeare-text-0.10.3-a0ae9b85c3588ff2572080a6d1cdd4c3 -package-id template-haskell-2.5.0.0-7d9b1443ac5ab69e5ed705a487990deb -package-id text-0.11.1.9-a75bb47eca7b1c98d59b7697de77ca4d -package-id time-1.2.0.3-74ef6ac31cee9aec02b036978af002d2 -package-id yesod-0.9.3.4-6339564f13b46afd787d750cf9daa3bf -package-id yesod-auth-0.7.8-94a2849a33bb6f6d4c0e15615ef22bea -package-id yesod-core-0.9.3.6-a70073f17a6f050226a91a97c305403d -package-id yesod-default-0.4.1-1f30d8d893952d0661328b681d9ce291 -package-id yesod-form-0.3.4-a84ba844c230f9847bca7c0056375179 -package-id yesod-static-0.3.2-c82f332e85e2c9ba709375b8a14040a1 -O -Wall -threaded -O2 -XHaskell98 -XTemplateHaskell -XQuasiQuotes -XOverloadedStrings -XNoImplicitPrelude -XCPP -XMultiParamTypeClasses -XTypeFamilies -XGADTs -XGeneralizedNewtypeDeriving -XFlexibleContexts .\main.hs 

quindi time-1.0.2.3 è sicuramente referenziato.

Tutti i pacchetti sono stati scaricati nelle ultime 24 ore quindi dovrebbero essere abbastanza aggiornati.

Come è possibile visualizzare Data.Time.Clock.UTC?

+0

Puoi mostrare il tuo file '.cabal' per dimostrare esattamente come hai aggiunto la dipendenza? – dflemstr

+0

'Data.Time.Clock.UTC' non è esposto dal pacchetto' time', quindi non è possibile accedervi dall'esterno. Non è possibile esporre moduli nascosti da un pacchetto, quindi l'unico modo, ma non consigliato, sarebbe di reinstallare 'time' con un file' .cabal' modificato che espone il modulo. ¹Se lo fai, il tuo codice non funzionerà per nessun altro, perché per loro è ancora nascosto. –

+1

Il 'Data.Time.Clock' ri-esporta' Data.Time.Clock.UTC' (che è nascosto). Quale istruzione import stai usando in Model.hs - l'importazione di Data.Time.Clock' non funziona? –

risposta

5

ho ottenuto lo stesso errore di recente amd la risposta è stato quello di

import Data.Time 

invece di

import Data.Time.Clock.UTC 

dal momento che il primo modulo ri-esporta il modulo nascosto.

+0

Esattamente a destra. Ho iniziato a utilizzare UTCTime e Haskell si è lamentato del fatto che non era definito. Così ho cercato fino a quando ho trovato la definizione e importato "Data.Time.Clock.UTC", che non funziona. Modificato su "Data.Time" e ora lo fa. Grazie. – arx

3

Mi sembra una variante dell'inferno della dipendenza dalla cabala. Se esegui ghc-pkg list time, suppongo che vedrai più versioni di tempo installate. Probabilmente la tua app utilizza una versione più recente rispetto alle librerie sottostanti.

Nel file cabal, provare a fare affidamento su con precisione la stessa versione di tempo indicata nel messaggio di errore e vedere se lo risolve.

+0

Non il problema (vedi l'altra risposta), ma grazie per Yesod. Sono una settimana e mezza in Haskell e tre giorni in Yesod e mi piacciono entrambi. – arx