簡體   English   中英

記錄的類型類實例未在Haskell中導入

[英]Documented typeclass instances not imported in Haskell

我正在嘗試使用time-recurrence庫中的UTCTime實例CalendarTimeConvertible。 它列在文檔中,但是當我將庫導入ghci並評估i: CalendarTimeConvertible ,實例不會出現。

class CalendarTimeConvertible t where
  toCalendarTime :: t -> CalendarTime
  fromCalendarTime :: CalendarTime -> Maybe t
    -- Defined in ‘time-recurrence-0.9.3:Data.Time.CalendarTime.CalendarTime’
instance CalendarTimeConvertible CalendarTime
  -- Defined in ‘time-recurrence-0.9.3:Data.Time.CalendarTime.CalendarTime’

它也不會出現在i: UTCTime的輸出中。

data UTCTime = UTCTime {utctDay :: Day, utctDayTime :: DiffTime}
    -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Eq UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Ord UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Read UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Format.Parse’
instance Show UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.LocalTime.Internal.ZonedTime’
instance ParseTime UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Format.Parse.Instances’
instance FormatTime UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Format.Format.Instances’

我無法弄清楚。 我缺少一個導入步驟嗎? 我搜索了顯式導入類型類實例的方法,但是空了。

編輯:這是我的會議:

λ> import Data.Time.Clock
λ> :i UTCTime
data UTCTime
  = UTCTime {utctDay :: time-1.9.1:Data.Time.Calendar.Days.Day,
             utctDayTime :: DiffTime}
    -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Eq UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Ord UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Read UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Format.Parse’
instance Show UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.LocalTime.Internal.ZonedTime’
λ> import Data.Time.CalendarTime
λ> :i CalendarTimeConvertible
class CalendarTimeConvertible t where
  toCalendarTime :: t -> CalendarTime
  fromCalendarTime :: CalendarTime -> Maybe t
    -- Defined in ‘time-recurrence-0.9.3:Data.Time.CalendarTime.CalendarTime’
instance CalendarTimeConvertible CalendarTime
  -- Defined in ‘time-recurrence-0.9.3:Data.Time.CalendarTime.CalendarTime’
λ> :i UTCTime
data UTCTime
  = UTCTime {utctDay :: time-1.9.1:Data.Time.Calendar.Days.Day,
             utctDayTime :: DiffTime}
    -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Eq UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Ord UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Clock.Internal.UTCTime’
instance Read UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.Format.Parse’
instance Show UTCTime
  -- Defined in ‘time-1.9.1:Data.Time.LocalTime.Internal.ZonedTime’
λ> 

time-recurrence取決於time < 1.6 ,但您的會話使用的time-1.9.1 這意味着該time已導入包是不一樣的timetime-recurrence使用,所以UTCTime具有一個實例類型不在范圍。

您需要以某種方式隱藏較新的time或修復time-recurrence以使用它構建。

通常,這意味着您在范圍內有兩個相同類型的不同版本。 例如,你有來自time-1.9.1 UTCTime ,但是time-recurrencetime-1.5.0.1定義了UTCTime的實例。

要檢查理論,請嘗試運行ghc-pkg list time 如果我是對的,它將列出安裝的兩個不同版本。

另請注意, time-recurrence不支持time-1.9.1 它具有以下time限制:

time >= 1.4 && < 1.6

它證實了我的理論。

您可以使用ghci -hide-package time-1.5.0.1修復它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM