2011-12-21 13 views
11

Tworzę prostą stronę internetową używając yesod.Jak korzystać z UTCTime w yesod bez ukrytych błędów modułów?

To działało, dopóki nie dodałem pola typu UTCTime do mojego modelu bazy danych.

początkowo masz błąd sugerując, dodaję „Czas 1.2.0.3” do mojego pliku cabal, tak zrobiłem i teraz mam dużo ten sam błąd, bez sugestii:

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 Command linia generowana przez cabal to:

"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 

, więc czas-1.0.2.3 jest niewątpliwie odwoływany.

Wszystkie paczki zostały pobrane w ciągu ostatnich 24 godzin, więc powinny być bardzo aktualne.

Jak mogę odkryć Data.Time.Clock.UTC?

+0

Czy możesz pokazać swój plik '.cabal', aby dokładnie pokazać, w jaki sposób dodałeś tę zależność? – dflemstr

+0

'Data.Time.Clock.UTC' nie jest wyeksponowany przez pakiet' time', więc nie można uzyskać do niego dostępu z zewnątrz. Nie można ujawnić ukrytych modułów z pakietu, więc jedynym, ale nie zalecanym sposobem byłoby ponowne zainstalowanie 'time' ze zmienionym plikiem' .cabal' odsłaniającym moduł. ¹Jeśli to zrobisz, Twój kod nie będzie działał dla nikogo innego, ponieważ dla niego jest nadal ukryty. –

+1

Funkcja 'Data.Time.Clock' ponownie eksportuje' Data.Time.Clock.UTC' (która jest ukryta). Jakiej instrukcji importowania używasz w Model.hs - czy 'import Data.Time.Clock' nie działa? –

Odpowiedz

5

mam ten sam błąd niedawno amd odpowiedź była

import Data.Time 

zamiast

import Data.Time.Clock.UTC 

ponieważ pierwszy moduł re-eksportu ukryty moduł.

+0

Dokładnie w prawo. Zacząłem używać UTCTime i Haskell skarżył się, że nie zostało to zdefiniowane. Więc szturchałem się, aż znalazłem definicję i zaimportowałem "Data.Time.Clock.UTC", co nie działa. Zmieniono na "Data.Time", a teraz tak jest. Dziękuję Ci. – arx

3

Brzmi dla mnie jak wariant piekła zależnego od kabały. Jeśli uruchomisz ghc-pkg list time, zgaduję, że będziesz mieć zainstalowane wiele wersji czasu. Twoja aplikacja prawdopodobnie używa nowszej wersji niż podstawowe biblioteki.

W swoim pliku cabal spróbuj polegać na dokładnie w tej samej wersji czasu, co wspomniano w komunikacie o błędzie i sprawdź, czy to rozwiązuje.

+0

Nie problem (patrz inna odpowiedź), ale dzięki za Yesod. Jestem półtora tygodnia w Haskell i trzy dni w Yesod i lubię ich obu. – arx