witch 0.3.0.1 → 0.3.1.0
raw patch · 4 files changed
+231/−3 lines, 4 filesdep +timePVP ok
version bump matches the API change (PVP)
Dependencies added: time
API changes (from Hackage documentation)
+ Witch.Instances: instance Witch.From.From Data.Fixed.Pico Data.Time.Clock.Internal.DiffTime.DiffTime
+ Witch.Instances: instance Witch.From.From Data.Fixed.Pico Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime
+ Witch.Instances: instance Witch.From.From Data.Time.Calendar.CalendarDiffDays.CalendarDiffDays Data.Time.LocalTime.Internal.CalendarDiffTime.CalendarDiffTime
+ Witch.Instances: instance Witch.From.From Data.Time.Calendar.Days.Day Data.Time.Calendar.Week.DayOfWeek
+ Witch.Instances: instance Witch.From.From Data.Time.Calendar.Days.Day GHC.Integer.Type.Integer
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.DiffTime.DiffTime Data.Fixed.Pico
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.DiffTime.DiffTime Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime Data.Fixed.Pico
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime Data.Time.LocalTime.Internal.CalendarDiffTime.CalendarDiffTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.POSIXTime.POSIXTime Data.Time.Clock.Internal.UTCTime.UTCTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.SystemTime.SystemTime Data.Time.Clock.Internal.AbsoluteTime.AbsoluteTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.SystemTime.SystemTime Data.Time.Clock.Internal.POSIXTime.POSIXTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.SystemTime.SystemTime Data.Time.Clock.Internal.UTCTime.UTCTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.UTCTime.UTCTime Data.Time.Clock.Internal.POSIXTime.POSIXTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.UTCTime.UTCTime Data.Time.Clock.Internal.SystemTime.SystemTime
+ Witch.Instances: instance Witch.From.From Data.Time.Clock.Internal.UniversalTime.UniversalTime GHC.Real.Rational
+ Witch.Instances: instance Witch.From.From Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay Data.Time.Clock.Internal.DiffTime.DiffTime
+ Witch.Instances: instance Witch.From.From Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay GHC.Real.Rational
+ Witch.Instances: instance Witch.From.From Data.Time.LocalTime.Internal.ZonedTime.ZonedTime Data.Time.Clock.Internal.UTCTime.UTCTime
+ Witch.Instances: instance Witch.From.From GHC.Integer.Type.Integer Data.Time.Calendar.Days.Day
+ Witch.Instances: instance Witch.From.From GHC.Real.Rational Data.Time.Clock.Internal.UniversalTime.UniversalTime
+ Witch.Instances: instance Witch.From.From GHC.Real.Rational Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay
Files
- src/lib/Witch/From.hs +2/−2
- src/lib/Witch/Instances.hs +112/−0
- src/test/Main.hs +115/−0
- witch.cabal +2/−1
src/lib/Witch/From.hs view
@@ -22,8 +22,8 @@ -- all. For example: -- -- >>> newtype Name = Name String- -- >>> instance 'From' Name String- -- >>> instance 'From' String Name+ -- >>> instance From Name String+ -- >>> instance From String Name from :: source -> target default from :: Coerce.Coercible source target => source -> target
src/lib/Witch/Instances.hs view
@@ -25,6 +25,10 @@ import qualified Data.Text.Encoding as Text import qualified Data.Text.Lazy as LazyText import qualified Data.Text.Lazy.Encoding as LazyText+import qualified Data.Time as Time+import qualified Data.Time.Clock.POSIX as Time+import qualified Data.Time.Clock.System as Time+import qualified Data.Time.Clock.TAI as Time import qualified Data.Word as Word import qualified GHC.Float as Float import qualified Numeric.Natural as Natural@@ -1078,6 +1082,114 @@ instance From.From (TryFromException.TryFromException s u) (TryFromException.TryFromException s t)++-- Day++-- | Uses 'Time.ModifiedJulianDay'.+instance From.From Integer Time.Day where+ from = Time.ModifiedJulianDay++-- | Uses 'Time.toModifiedJulianDay'.+instance From.From Time.Day Integer where+ from = Time.toModifiedJulianDay++-- DayOfWeek++-- | Uses 'Time.dayOfWeek'.+instance From.From Time.Day Time.DayOfWeek where+ from = Time.dayOfWeek++-- UniversalTime++-- | Uses 'Time.ModJulianDate'.+instance From.From Rational Time.UniversalTime where+ from = Time.ModJulianDate++-- | Uses 'Time.getModJulianDate'.+instance From.From Time.UniversalTime Rational where+ from = Time.getModJulianDate++-- DiffTime++-- | Uses 'realToFrac'.+instance From.From Fixed.Pico Time.DiffTime where+ from = realToFrac++-- | Uses 'realToFrac'.+instance From.From Time.DiffTime Fixed.Pico where+ from = realToFrac++-- NominalDiffTime++-- | Uses 'Time.secondsToNominalDiffTime'.+instance From.From Fixed.Pico Time.NominalDiffTime where+ from = Time.secondsToNominalDiffTime++-- | Uses 'Time.nominalDiffTimeToSeconds'.+instance From.From Time.NominalDiffTime Fixed.Pico where+ from = Time.nominalDiffTimeToSeconds++-- POSIXTime++-- | Uses 'Time.systemToPOSIXTime'.+instance From.From Time.SystemTime Time.POSIXTime where+ from = Time.systemToPOSIXTime++-- | Uses 'Time.utcTimeToPOSIXSeconds'.+instance From.From Time.UTCTime Time.POSIXTime where+ from = Time.utcTimeToPOSIXSeconds++-- | Uses 'Time.posixSecondsToUTCTime'.+instance From.From Time.POSIXTime Time.UTCTime where+ from = Time.posixSecondsToUTCTime++-- SystemTime++-- | Uses 'Time.utcToSystemTime'.+instance From.From Time.UTCTime Time.SystemTime where+ from = Time.utcToSystemTime++-- | Uses 'Time.systemToTAITime'.+instance From.From Time.SystemTime Time.AbsoluteTime where+ from = Time.systemToTAITime++-- | Uses 'Time.systemToUTCTime'.+instance From.From Time.SystemTime Time.UTCTime where+ from = Time.systemToUTCTime++-- TimeOfDay++-- | Uses 'Time.timeToTimeOfDay'.+instance From.From Time.DiffTime Time.TimeOfDay where+ from = Time.timeToTimeOfDay++-- | Uses 'Time.dayFractionToTimeOfDay'.+instance From.From Rational Time.TimeOfDay where+ from = Time.dayFractionToTimeOfDay++-- | Uses 'Time.timeOfDayToTime'.+instance From.From Time.TimeOfDay Time.DiffTime where+ from = Time.timeOfDayToTime++-- | Uses 'Time.timeOfDayToDayFraction'.+instance From.From Time.TimeOfDay Rational where+ from = Time.timeOfDayToDayFraction++-- CalendarDiffTime++-- | Uses 'Time.calendarTimeDays'.+instance From.From Time.CalendarDiffDays Time.CalendarDiffTime where+ from = Time.calendarTimeDays++-- | Uses 'Time.calendarTimeTime'.+instance From.From Time.NominalDiffTime Time.CalendarDiffTime where+ from = Time.calendarTimeTime++-- ZonedTime++-- | Uses 'Time.zonedTimeToUTC'.+instance From.From Time.ZonedTime Time.UTCTime where+ from = Time.zonedTimeToUTC fromNonNegativeIntegral :: (Integral s, Num t) => s -> Either Exception.ArithException t
src/test/Main.hs view
@@ -19,6 +19,10 @@ import qualified Data.Set as Set import qualified Data.Text as Text import qualified Data.Text.Lazy as LazyText+import qualified Data.Time as Time+import qualified Data.Time.Clock.POSIX as Time+import qualified Data.Time.Clock.System as Time+import qualified Data.Time.Clock.TAI as Time import qualified Data.Word as Word import qualified Numeric.Natural as Natural import qualified Test.Hspec as Hspec@@ -1641,6 +1645,114 @@ Hspec.describe "From (TryFromException s t0) (TryFromException s t1)" $ do Hspec.it "needs tests" Hspec.pending + -- Day++ Hspec.describe "From Integer Day" $ do+ let f = Witch.from @Integer @Time.Day+ test $ f 0 `Hspec.shouldBe` Time.ModifiedJulianDay 0++ Hspec.describe "From Day Integer" $ do+ let f = Witch.from @Time.Day @Integer+ test $ f (Time.ModifiedJulianDay 0) `Hspec.shouldBe` 0++ -- DayOfWeek++ Hspec.describe "From Day DayOfWeek" $ do+ let f = Witch.from @Time.Day @Time.DayOfWeek+ test $ f (Time.ModifiedJulianDay 0) `Hspec.shouldBe` Time.Wednesday++ -- UniversalTime++ Hspec.describe "From Rational UniversalTime" $ do+ let f = Witch.from @Rational @Time.UniversalTime+ test $ f 0 `Hspec.shouldBe` Time.ModJulianDate 0++ Hspec.describe "From UniversalTime Rational" $ do+ let f = Witch.from @Time.UniversalTime @Rational+ test $ f (Time.ModJulianDate 0) `Hspec.shouldBe` 0++ -- DiffTime++ Hspec.describe "From Pico DiffTime" $ do+ let f = Witch.from @Fixed.Pico @Time.DiffTime+ test $ f 0 `Hspec.shouldBe` 0++ Hspec.describe "From DiffTime Pico" $ do+ let f = Witch.from @Time.DiffTime @Fixed.Pico+ test $ f 0 `Hspec.shouldBe` 0++ -- NominalDiffTime++ Hspec.describe "From Pico NominalDiffTime" $ do+ let f = Witch.from @Fixed.Pico @Time.NominalDiffTime+ test $ f 0 `Hspec.shouldBe` 0++ Hspec.describe "From NominalDiffTime Pico" $ do+ let f = Witch.from @Time.NominalDiffTime @Fixed.Pico+ test $ f 0 `Hspec.shouldBe` 0++ -- POSIXTime++ Hspec.describe "From SystemTime POSIXTime" $ do+ let f = Witch.from @Time.SystemTime @Time.POSIXTime+ test $ f (Time.MkSystemTime 0 0) `Hspec.shouldBe` 0++ Hspec.describe "From UTCTime POSIXTime" $ do+ let f = Witch.from @Time.UTCTime @Time.POSIXTime+ test $ f unixEpoch `Hspec.shouldBe` 0++ Hspec.describe "From POSIXTime UTCTime" $ do+ let f = Witch.from @Time.POSIXTime @Time.UTCTime+ test $ f 0 `Hspec.shouldBe` unixEpoch++ -- SystemTime++ Hspec.describe "From UTCTime SystemTime" $ do+ let f = Witch.from @Time.UTCTime @Time.SystemTime+ test $ f unixEpoch `Hspec.shouldBe` Time.MkSystemTime 0 0++ Hspec.describe "From SystemTime AbsoluteTime" $ do+ let f = Witch.from @Time.SystemTime @Time.AbsoluteTime+ test $ f (Time.MkSystemTime (-3506716800) 0) `Hspec.shouldBe` Time.taiEpoch++ Hspec.describe "From SystemTime UTCTime" $ do+ let f = Witch.from @Time.SystemTime @Time.UTCTime+ test $ f (Time.MkSystemTime 0 0) `Hspec.shouldBe` unixEpoch++ -- TimeOfDay++ Hspec.describe "From DiffTime TimeOfDay" $ do+ let f = Witch.from @Time.DiffTime @Time.TimeOfDay+ test $ f 0 `Hspec.shouldBe` Time.TimeOfDay 0 0 0++ Hspec.describe "From Rational TimeOfDay" $ do+ let f = Witch.from @Rational @Time.TimeOfDay+ test $ f 0 `Hspec.shouldBe` Time.TimeOfDay 0 0 0++ Hspec.describe "From TimeOfDay DiffTime" $ do+ let f = Witch.from @Time.TimeOfDay @Time.DiffTime+ test $ f (Time.TimeOfDay 0 0 0) `Hspec.shouldBe` 0++ Hspec.describe "From TimeOfDay Rational" $ do+ let f = Witch.from @Time.TimeOfDay @Rational+ test $ f (Time.TimeOfDay 0 0 0) `Hspec.shouldBe` 0++ -- CalendarDiffTime++ Hspec.describe "From CalendarDiffDays CalendarDiffTime" $ do+ let f = Witch.from @Time.CalendarDiffDays @Time.CalendarDiffTime+ test $ f (Time.CalendarDiffDays 0 0) `Hspec.shouldBe` Time.CalendarDiffTime 0 0++ Hspec.describe "From NominalDiffTime CalendarDiffTime" $ do+ let f = Witch.from @Time.NominalDiffTime @Time.CalendarDiffTime+ test $ f 0 `Hspec.shouldBe` Time.CalendarDiffTime 0 0++ -- ZonedTime++ Hspec.describe "From ZonedTime UTCTime" $ do+ let f = Witch.from @Time.ZonedTime @Time.UTCTime+ test $ f (Time.ZonedTime (Time.LocalTime (Time.ModifiedJulianDay 0) (Time.TimeOfDay 0 0 0)) Time.utc) `Hspec.shouldBe` Time.UTCTime (Time.ModifiedJulianDay 0) 0+ test :: Hspec.Example a => a -> Hspec.SpecWith (Hspec.Arg a) test = Hspec.it "" @@ -1649,6 +1761,9 @@ hush :: Either x a -> Maybe a hush = either (const Nothing) Just++unixEpoch :: Time.UTCTime+unixEpoch = Time.UTCTime (Time.ModifiedJulianDay 40587) 0 data Untested = Untested
witch.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: witch-version: 0.3.0.1+version: 0.3.1.0 synopsis: Convert values from one type into another. description: Witch converts values from one type into another. @@ -22,6 +22,7 @@ , bytestring >= 0.10.12 && < 0.11 , containers >= 0.6.2 && < 0.7 , text >= 1.2.4 && < 1.3+ , time >= 1.9 && < 1.12 default-language: Haskell2010 ghc-options: -Weverything