2010-07-11 49 views
14

數據我有這樣的FF定義的數據:不能含有UTCTime

import Data.Time.Clock 

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

當我編譯它,我得到的FF得出一個顯示實例。錯誤:

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

我已經有這要根據documentation已經有這個實例的時間1.1.3包。我的GHC版本是6.8.2。

+0

使用ghc-pkg檢查您是否實際選取了正確的版本。 – 2010-07-11 15:41:30

+0

是的,1.1.3正在被拿起。我跑了「ghc-pkg最新的時間」。我也用「-v」選項進行了編譯,我看到編譯器實際上隱藏了舊版本,轉而使用1.1.3。 – 2010-07-11 16:24:53

+0

谷歌搜索「實例顯示」UTCTime「'顯示它在'Data.Time.LocalTime'中。這種技術可能對未來的類似問題有用。 – 2014-06-14 15:50:59

回答

28

請勿單獨導入每個Data.Time套件。它專門爲你導入Data.Time,這將會吸引所有常用的東西。 包括Show實例UTCTime

如果你不想那麼多雜亂的命名空間,導入你需要的符號:

import Data.Time (UTCTime, getCurrentTime) 

或任何其他。反正這是一個好主意 - 如果圖書館得到更新並開始使用已定義的名稱 ,它可以保護您免受名稱衝突 。

3

該文檔在於。如果您查看Data.Time.Clock.UTC的來源,那麼UTCTime根本沒有Show實例。

編輯:

由於newacct有益指出,有在Data.Time.LocalTime.LocalTimeShow UTCTime孤立的實例,因此,如果您導入,您的代碼將工作。

+3

它在Data.Time.LocalTime.LocalTime,雖然:http://hackage.haskell.org/packages/archive/time/1.1.3/doc/html/src/Data-Time-LocalTime-LocalTime.html – newacct 2010-07-11 16:32:27

+0

我通過電子郵件發送軟件包維護人員需要澄清。我會盡快回復。 – 2010-07-11 16:42:42

+1

這是一個在Data.Time.LocalTime.LocalTime中定義的孤立實例。導入Data.Time將爲Data.Time.UTC中的構造函數和Data.Time.LocalTime.LocalTime中的Show實例。 – 2010-07-12 15:36:24