[英]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
已導入包是不一樣的time
即time-recurrence
使用,所以UTCTime
具有一個實例類型不在范圍。
您需要以某種方式隱藏較新的time
或修復time-recurrence
以使用它構建。
通常,這意味着您在范圍內有兩個相同類型的不同版本。 例如,你有來自time-1.9.1
UTCTime
,但是time-recurrence
從time-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.