diff --git a/src/Data/Validity/Time/Calendar.hs b/src/Data/Validity/Time/Calendar.hs
--- a/src/Data/Validity/Time/Calendar.hs
+++ b/src/Data/Validity/Time/Calendar.hs
@@ -8,5 +8,4 @@
 
 -- | Valid according to the 'Integer' it contains.
 instance Validity Day where
-    isValid (ModifiedJulianDay i) = isValid i
-    validate = validateByCheckingName "Day"
+    validate = delve "toModifiedJulianDay" . toModifiedJulianDay
diff --git a/src/Data/Validity/Time/Clock.hs b/src/Data/Validity/Time/Clock.hs
--- a/src/Data/Validity/Time/Clock.hs
+++ b/src/Data/Validity/Time/Clock.hs
@@ -10,32 +10,24 @@
 
 -- | Valid according to the 'Rational' it contains.
 instance Validity UniversalTime where
-    isValid (ModJulianDate i) = isValid i
-    validate = validateByCheckingName "UniversalTime"
+    validate = delve "toModifiedJulianDay" . getModJulianDate
 
 -- | Trivially valid
 instance Validity DiffTime where
-    isValid = triviallyValid
-    validate = validateByCheckingName "DiffTime"
+    validate = trivialValidation
 
 instance Validity UTCTime where
-    isValid UTCTime {..} =
-        and
-            [ isValid utctDay
-            , isValid utctDayTime
-            , utctDayTime >= 0
-            , utctDayTime < 86401
-            ]
     validate UTCTime {..} =
         mconcat
-            [ utctDay <?!> "utctDay"
-            , utctDayTime <?!> "utctDayTime"
-            , utctDayTime >= 0 <?@> "The day time is positive."
-            , utctDayTime < 86401 <?@> "The day time is strictly less than 86401."
+            [ annotate utctDay "utctDay"
+            , annotate utctDayTime "utctDayTime"
+            , check (utctDayTime >= 0) "The day time is positive."
+            , check
+                  (utctDayTime < 86401)
+                  "The day time is strictly less than 86401."
             ]
 
 instance Validity NominalDiffTime
     -- NominalDiffTime contains a 'Pico' but that constructorr is not exported so we can't do any better than this.
                                                                                                                     where
-    isValid = isValid . (round :: NominalDiffTime -> Integer)
-    validate = validateByCheckingName "NominalDiffTime"
+    validate ndt = annotate ((round :: NominalDiffTime -> Integer) ndt) "round"
diff --git a/src/Data/Validity/Time/Format.hs b/src/Data/Validity/Time/Format.hs
--- a/src/Data/Validity/Time/Format.hs
+++ b/src/Data/Validity/Time/Format.hs
@@ -13,26 +13,15 @@
 #if MIN_VERSION_time(1,5,0)
 -- | Valid according to the contained values
 instance Validity TimeLocale where
-    isValid TimeLocale {..} =
-        and
-            [ isValid wDays
-            , isValid months
-            , isValid amPm
-            , isValid dateTimeFmt
-            , isValid dateFmt
-            , isValid timeFmt
-            , isValid time12Fmt
-            , isValid knownTimeZones
-            ]
     validate TimeLocale {..} =
         mconcat
-            [ wDays <?!> "wDays"
-            , months <?!> "months"
-            , amPm <?!> "amPm"
-            , dateTimeFmt <?!> "dateTimeFmt"
-            , dateFmt <?!> "dateFmt"
-            , timeFmt <?!> "timeFmt"
-            , time12Fmt <?!> "time12Fmt"
-            , knownTimeZones <?!> "knownTimeZones"
+            [ annotate wDays $ "wDays"
+            , annotate months $ "months"
+            , annotate amPm $ "amPm"
+            , annotate dateTimeFmt $ "dateTimeFmt"
+            , annotate dateFmt $ "dateFmt"
+            , annotate timeFmt $ "timeFmt"
+            , annotate time12Fmt $ "time12Fmt"
+            , annotate knownTimeZones $ "knownTimeZones"
             ]
 #endif
diff --git a/src/Data/Validity/Time/LocalTime.hs b/src/Data/Validity/Time/LocalTime.hs
--- a/src/Data/Validity/Time/LocalTime.hs
+++ b/src/Data/Validity/Time/LocalTime.hs
@@ -11,14 +11,11 @@
 
 -- | Valid according to the contained values.
 instance Validity TimeZone where
-    isValid TimeZone {..} =
-        isValid timeZoneMinutes &&
-        isValid timeZoneSummerOnly && isValid timeZoneName
     validate TimeZone {..} =
         mconcat
-            [ timeZoneMinutes <?!> "timeZoneMinutes"
-            , timeZoneSummerOnly <?!> "timeZoneSummerOnly"
-            , timeZoneName <?!> "timeZoneName"
+            [ annotate timeZoneMinutes "timeZoneMinutes"
+            , annotate timeZoneSummerOnly "timeZoneSummerOnly"
+            , annotate timeZoneName "timeZoneName"
             ]
 
 -- | Valid according to the validity of contained values and these constraints:
@@ -27,43 +24,31 @@
 --  * todMin : range 0 - 59
 --  * todSec : 0 <= todSec < 61,
 instance Validity TimeOfDay where
-    isValid TimeOfDay {..} =
-        and
-            [ isValid todHour
-            , todHour >= 0
-            , todHour <= 23
-            , isValid todMin
-            , todMin >= 0
-            , todMin <= 59
-            , isValid todSec
-            , todSec >= 0
-            , todSec < 61
-            ]
     validate TimeOfDay {..} =
         mconcat
-            [ todHour <?!> "todHour"
-            , todHour >= 0 <?@> "The 'hour' is positive."
-            , todHour <= 23 <?@> "The 'hour' is 23 or less."
-            , todMin <?!> "todMin"
-            , todMin >= 0 <?@> "The 'minute' is positive."
-            , todMin <= 59 <?@> "The 'minute' is 59 or less."
-            , todSec <?!> "todSec"
-            , todSec >= 0 <?@> "The 'second' is positive."
-            , todSec < 61 <?@> "The 'second' is 60 or less."
+            [ annotate todHour "todHour"
+            , check (todHour >= 0) "The 'hour' is positive."
+            , check (todHour <= 23) "The 'hour' is 23 or less."
+            , annotate todMin "todMin"
+            , check (todMin >= 0) "The 'minute' is positive."
+            , check (todMin <= 59) "The 'minute' is 59 or less."
+            , annotate todSec "todSec"
+            , check (todSec >= 0) "The 'second' is positive."
+            , check (todSec < 61) "The 'second' is 60 or less."
             ]
 
 -- | Valid according to the validity of contained values
 instance Validity LocalTime where
-    isValid LocalTime {..} = isValid localDay && isValid localTimeOfDay
     validate LocalTime {..} =
-        mconcat [localDay <?!> "localDay", localTimeOfDay <?!> "localTimeOfDay"]
+        mconcat
+            [ annotate localDay "localDay"
+            , annotate localTimeOfDay "localTimeOfDay"
+            ]
 
 -- | Valid according to the validity of contained values
 instance Validity ZonedTime where
-    isValid ZonedTime {..} =
-        isValid zonedTimeToLocalTime && isValid zonedTimeZone
     validate ZonedTime {..} =
         mconcat
-            [ zonedTimeToLocalTime <?!> "zonedTimeToLocalTime"
-            , zonedTimeZone <?!> "zonedTimeZone"
+            [ annotate zonedTimeToLocalTime "zonedTimeToLocalTime"
+            , annotate zonedTimeZone "zonedTimeZone"
             ]
diff --git a/validity-time.cabal b/validity-time.cabal
--- a/validity-time.cabal
+++ b/validity-time.cabal
@@ -1,33 +1,41 @@
-name: validity-time
-version: 0.1.0.0
-cabal-version: >=1.10
-build-type: Simple
-license: MIT
-license-file: LICENSE
-copyright: Copyright: (c) 2017 Tom Sydney Kerckhove
-maintainer: syd.kerckhove@gmail.com
-homepage: https://github.com/NorfairKing/validity#readme
-synopsis: Validity instances for time
-description:
-    Please see README.md
-category: Validity
-author: Tom Sydney Kerckhove
+-- This file has been generated from package.yaml by hpack version 0.20.0.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: 30cee3611d040b2784cf1196ad3d9a0e5181ae26feac32371baee9c241975e8e
 
+name:           validity-time
+version:        0.2.0.0
+synopsis:       Validity instances for time
+description:    Please see README.md
+category:       Validity
+homepage:       https://github.com/NorfairKing/validity#readme
+bug-reports:    https://github.com/NorfairKing/validity/issues
+author:         Tom Sydney Kerckhove
+maintainer:     syd.kerckhove@gmail.com
+copyright:      Copyright: (c) 2017-2018 Tom Sydney Kerckhove
+license:        MIT
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
+
 source-repository head
-    type: git
-    location: https://github.com/NorfairKing/validity
+  type: git
+  location: https://github.com/NorfairKing/validity
 
 library
-    exposed-modules:
-        Data.Validity.Time
-        Data.Validity.Time.Calendar
-        Data.Validity.Time.Clock
-        Data.Validity.Time.Format
-        Data.Validity.Time.LocalTime
-    build-depends:
-        base >=4.7 && <5,
-        validity >=0.4 && <0.5,
-        time -any
-    default-language: Haskell2010
-    hs-source-dirs: src
-
+  hs-source-dirs:
+      src
+  build-depends:
+      base >=4.7 && <5
+    , time
+    , validity >=0.5 && <0.6
+  exposed-modules:
+      Data.Validity.Time
+      Data.Validity.Time.Calendar
+      Data.Validity.Time.Clock
+      Data.Validity.Time.Format
+      Data.Validity.Time.LocalTime
+  other-modules:
+      Paths_validity_time
+  default-language: Haskell2010
