Документированные экземпляры классов типов, не импортированные в Haskell - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь использовать экземпляр UTCTime CalendarTimeConvertible, найденный в библиотеке time-recurrence .Он указан в документации, но когда я импортирую библиотеку в 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 не отображается.1008 *

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’
λ> 

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Обычно это означает, что у вас есть две разные версии одного и того же типа в области видимости.Например, у вас есть UTCTime из time-1.9.1, но time-recurrence определяет экземпляр для UTCTime из time-1.5.0.1.

Чтобы проверить теорию, попробуйте запустить ghc-pkg list time.Если я прав, в списке будут указаны две разные версии.

Также обратите внимание, что time-recurrence не поддерживает time-1.9.1.Он имеет следующие ограничения на time:

time >= 1.4 && < 1.6

Это подтверждает мою теорию.

Вы можете исправить это, используя ghci -hide-package time-1.5.0.1

0 голосов
/ 07 июня 2018

time-recurrence зависит от time < 1.6, но ваша сессия использует time-1.9.1.Это означает, что импортированный пакет time отличается от time, который используется time-recurrence, поэтому тип UTCTime с экземпляром находится вне области действия.

Вам нужнокаким-либо образом либо скрыть более новый time, либо исправить time-recurrence, чтобы построить с ним.

...