diff --git a/lib/Polysemy/Time.hs b/lib/Polysemy/Time.hs
--- a/lib/Polysemy/Time.hs
+++ b/lib/Polysemy/Time.hs
@@ -7,19 +7,30 @@
   -- * Time effect
   module Polysemy.Time.Data.Time,
   GhcTime,
+
   -- * Interpreters
   interpretTimeGhc,
   interpretTimeGhcAt,
   interpretTimeGhcConstant,
   interpretTimeGhcConstantNow,
+
   -- * Data types
   module Polysemy.Time.Data.TimeUnit,
-  module Polysemy.Time.Calendar,
+  Calendar (..),
+  HasDay (..),
+  HasHour (..),
+  HasMinute (..),
+  HasMonth (..),
+  HasNanoSecond (..),
+  HasSecond (..),
+  HasYear (..),
+
   -- * Combinators
   measure,
   while,
   loop,
   loop_,
+  diff,
 ) where
 
 import Polysemy.Time.Calendar (
@@ -47,6 +58,7 @@
   Years (..),
   convert,
   )
+import Polysemy.Time.Diff (diff)
 import Polysemy.Time.Ghc (
   GhcTime,
   interpretTimeGhc,
diff --git a/lib/Polysemy/Time/At.hs b/lib/Polysemy/Time/At.hs
--- a/lib/Polysemy/Time/At.hs
+++ b/lib/Polysemy/Time/At.hs
@@ -1,3 +1,4 @@
+-- |Interceptors for fixing a specific time, Internal
 module Polysemy.Time.At where
 
 import Polysemy (intercept)
diff --git a/lib/Polysemy/Time/Calendar.hs b/lib/Polysemy/Time/Calendar.hs
--- a/lib/Polysemy/Time/Calendar.hs
+++ b/lib/Polysemy/Time/Calendar.hs
@@ -1,10 +1,13 @@
+{-# options_haddock prune #-}
+
+-- |Classes for constructing datetime values and extracting time components, Internal
 module Polysemy.Time.Calendar where
 
 import Data.Time (
   Day,
   DiffTime,
-  TimeOfDay(TimeOfDay),
-  UTCTime(UTCTime),
+  TimeOfDay (TimeOfDay),
+  UTCTime (UTCTime),
   fromGregorian,
   timeOfDayToTime,
   timeToTimeOfDay,
diff --git a/lib/Polysemy/Time/Class/Instant.hs b/lib/Polysemy/Time/Class/Instant.hs
--- a/lib/Polysemy/Time/Class/Instant.hs
+++ b/lib/Polysemy/Time/Class/Instant.hs
@@ -1,7 +1,9 @@
+-- |The 'Instant' class, Internal
 module Polysemy.Time.Class.Instant where
 
 import Data.Time (Day, UTCTime(UTCTime))
 
+-- |This abstracts over types that refer to a specific point in time.
 class Instant i dt | i -> dt where
   dateTime :: i -> dt
 
diff --git a/lib/Polysemy/Time/Data/Time.hs b/lib/Polysemy/Time/Data/Time.hs
--- a/lib/Polysemy/Time/Data/Time.hs
+++ b/lib/Polysemy/Time/Data/Time.hs
@@ -1,5 +1,10 @@
+{-# options_haddock prune #-}
+
+-- |Time effect, Internal
 module Polysemy.Time.Data.Time where
 
+import Polysemy (makeSem_)
+
 import Polysemy.Time.Data.TimeUnit (AddTimeUnit, TimeUnit)
 
 -- |The Time effect.
@@ -17,4 +22,46 @@
   -- |Set the current date, if the interpreter supports it.
   SetDate :: d -> Time t d m ()
 
-makeSem ''Time
+makeSem_ ''Time
+
+-- |Produce the current time, possibly relative to what was set with 'SetTime' or 'SetDate'
+now ::
+  ∀ t d r .
+  Member (Time t d) r =>
+  Sem r t
+
+-- |Produce the current date, possibly relative to what was set with 'SetTime' or 'SetDate'
+today ::
+  ∀ t d r .
+  Member (Time t d) r =>
+  Sem r d
+
+-- |Suspend the current computation for the specified time span.
+sleep ::
+  ∀ t d u r .
+  TimeUnit u =>
+  Member (Time t d) r =>
+  u ->
+  Sem r ()
+
+-- |Set the current time, if the interpreter supports it.
+setTime ::
+  ∀ t d r .
+  Member (Time t d) r =>
+  t ->
+  Sem r ()
+
+-- |Adjust the current time relatively, if the interpreter supports it.
+adjust ::
+  ∀ t d u1 u2 r .
+  AddTimeUnit t u1 u2 =>
+  Member (Time t d) r =>
+  u1 ->
+  Sem r ()
+
+-- |Set the current date, if the interpreter supports it.
+setDate ::
+  ∀ t d r .
+  Member (Time t d) r =>
+  d ->
+  Sem r ()
diff --git a/lib/Polysemy/Time/Data/TimeUnit.hs b/lib/Polysemy/Time/Data/TimeUnit.hs
--- a/lib/Polysemy/Time/Data/TimeUnit.hs
+++ b/lib/Polysemy/Time/Data/TimeUnit.hs
@@ -1,3 +1,4 @@
+-- |TimeUnit Class and Data Types, Internal
 module Polysemy.Time.Data.TimeUnit where
 
 import Data.Time (
@@ -8,6 +9,7 @@
   )
 import Torsor (Additive, Scaling, Torsor, add, scale)
 
+-- |For deriving via.
 newtype FromSeconds a =
   FromSeconds a
   deriving (Eq, Show)
@@ -36,16 +38,19 @@
 
 -- * Data types used to specify time spans, e.g. for sleeping.
 
+-- |Years.
 newtype Years =
   Years { unYear :: Int64 }
   deriving (Eq, Show, Generic)
   deriving newtype (Num, Real, Enum, Integral, Ord, Additive)
 
+-- |Months.
 newtype Months =
   Months { unMonths :: Int64 }
   deriving (Eq, Show, Generic)
   deriving newtype (Num, Real, Enum, Integral, Ord, Additive)
 
+-- |Weeks.
 newtype Weeks =
   Weeks { unWeeks :: Int64 }
   deriving (Eq, Show, Generic)
@@ -55,6 +60,7 @@
   nanos =
     NanoSeconds 604800000000000
 
+-- |Days.
 newtype Days =
   Days { unDays :: Int64 }
   deriving (Eq, Show, Generic)
@@ -64,6 +70,7 @@
   nanos =
     NanoSeconds 86400000000000
 
+-- |Hours.
 newtype Hours =
   Hours { unHours :: Int64 }
   deriving (Eq, Show, Generic)
@@ -73,6 +80,7 @@
   nanos =
     NanoSeconds 3600000000000
 
+-- |Minutes.
 newtype Minutes =
   Minutes { unMinutes :: Int64 }
   deriving (Eq, Show, Generic)
@@ -82,6 +90,7 @@
   nanos =
     NanoSeconds 60000000000
 
+-- |Seconds.
 newtype Seconds =
   Seconds { unSeconds :: Int64 }
   deriving (Eq, Show, Generic)
@@ -91,6 +100,7 @@
   nanos =
     NanoSeconds 1000000000
 
+-- |Milliseconds.
 newtype MilliSeconds =
   MilliSeconds { unMilliSeconds :: Int64 }
   deriving (Eq, Show, Generic)
@@ -101,6 +111,7 @@
   nanos =
     NanoSeconds 1000000
 
+-- |Microseconds.
 newtype MicroSeconds =
   MicroSeconds { unMicroSeconds :: Int64 }
   deriving (Eq, Show, Generic)
@@ -111,6 +122,8 @@
   nanos =
     NanoSeconds 1000
 
+-- |Nanoseconds.
+-- This is the base unit for all conversions.
 newtype NanoSeconds =
   NanoSeconds { unNanoSeconds :: Int64 }
   deriving (Eq, Show, Generic)
@@ -160,9 +173,11 @@
 convert =
   fromNanos . toNanos
 
+-- |Convenience alias for 'addTimeUnit'.
 type AddTimeUnit t u1 u2 =
   (TimeUnit u1, TimeUnit u2, Torsor t u2)
 
+-- |Add a time unit to an instant.
 addTimeUnit ::
   ∀ t u1 u2 .
   AddTimeUnit t u1 u2 =>
diff --git a/lib/Polysemy/Time/Debug.hs b/lib/Polysemy/Time/Debug.hs
--- a/lib/Polysemy/Time/Debug.hs
+++ b/lib/Polysemy/Time/Debug.hs
@@ -1,10 +1,12 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# language NoImplicitPrelude #-}
+{-# options_haddock prune, hide #-}
 
+-- |Debug printing, Internal
 module Polysemy.Time.Debug where
 
 import Data.String.Interpolate (i)
 import qualified Data.Text as Text
-import GHC.Stack (SrcLoc(..))
+import GHC.Stack (SrcLoc (..))
 import Relude
 import System.IO.Unsafe (unsafePerformIO)
 
diff --git a/lib/Polysemy/Time/Diff.hs b/lib/Polysemy/Time/Diff.hs
--- a/lib/Polysemy/Time/Diff.hs
+++ b/lib/Polysemy/Time/Diff.hs
@@ -1,3 +1,4 @@
+-- |Diff Combinator, Internal
 module Polysemy.Time.Diff where
 
 import Torsor (Torsor, difference)
@@ -5,6 +6,7 @@
 import Polysemy.Time.Class.Instant (Instant, dateTime)
 import Polysemy.Time.Data.TimeUnit (TimeUnit, convert)
 
+-- |Subtract two arbitrary values that can be converted to an 'Instant'.
 diff ::
   ∀ dt u i1 i2 .
   TimeUnit u =>
diff --git a/lib/Polysemy/Time/Ghc.hs b/lib/Polysemy/Time/Ghc.hs
--- a/lib/Polysemy/Time/Ghc.hs
+++ b/lib/Polysemy/Time/Ghc.hs
@@ -1,3 +1,6 @@
+{-# options_haddock prune #-}
+
+-- |'Time' interpreters for the data types from "Data.Time", Internal
 module Polysemy.Time.Ghc where
 
 import Control.Concurrent (threadDelay)
diff --git a/lib/Polysemy/Time/Loop.hs b/lib/Polysemy/Time/Loop.hs
--- a/lib/Polysemy/Time/Loop.hs
+++ b/lib/Polysemy/Time/Loop.hs
@@ -1,8 +1,9 @@
+-- |Combinators for looping with a sleep interval, Internal
 module Polysemy.Time.Loop where
 
+import qualified Polysemy.Time.Data.Time as Time
 import Polysemy.Time.Data.Time (Time)
 import Polysemy.Time.Data.TimeUnit (TimeUnit)
-import qualified Polysemy.Time.Data.Time as Time
 
 -- |Repeatedly run the @action@, sleeping for @interval@ between executions.
 -- Stops when @action@ returns @False@.
diff --git a/lib/Polysemy/Time/Measure.hs b/lib/Polysemy/Time/Measure.hs
--- a/lib/Polysemy/Time/Measure.hs
+++ b/lib/Polysemy/Time/Measure.hs
@@ -1,3 +1,4 @@
+-- |Measure an Action's Duration, Internal
 module Polysemy.Time.Measure where
 
 import Torsor (Torsor)
diff --git a/lib/Polysemy/Time/Orphans.hs b/lib/Polysemy/Time/Orphans.hs
--- a/lib/Polysemy/Time/Orphans.hs
+++ b/lib/Polysemy/Time/Orphans.hs
@@ -1,9 +1,11 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# options_ghc -fno-warn-orphans #-}
+{-# options_haddock prune, hide #-}
 
+-- |Orphans for "Data.Time", Internal
 module Polysemy.Time.Orphans where
 
-import Data.Time (diffUTCTime, addUTCTime, NominalDiffTime, UTCTime)
-import Torsor (Additive(..), Torsor(..))
+import Data.Time (NominalDiffTime, UTCTime, addUTCTime, diffUTCTime)
+import Torsor (Additive (..), Torsor (..))
 
 instance Additive NominalDiffTime where
   zero =
diff --git a/lib/Polysemy/Time/Prelude.hs b/lib/Polysemy/Time/Prelude.hs
--- a/lib/Polysemy/Time/Prelude.hs
+++ b/lib/Polysemy/Time/Prelude.hs
@@ -1,6 +1,7 @@
-{-# options_haddock hide #-}
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# language NoImplicitPrelude #-}
+{-# options_haddock prune, hide #-}
 
+-- |Prelude, Internal
 module Polysemy.Time.Prelude (
   module Polysemy.Time.Prelude,
   module Data.Foldable,
diff --git a/lib/Polysemy/Time/Sleep.hs b/lib/Polysemy/Time/Sleep.hs
--- a/lib/Polysemy/Time/Sleep.hs
+++ b/lib/Polysemy/Time/Sleep.hs
@@ -1,8 +1,11 @@
+{-# options_haddock prune, hide #-}
+
+-- |Helpers for sleeping, Internal
 module Polysemy.Time.Sleep where
 
 import Control.Concurrent (threadDelay)
 
-import Polysemy.Time.Data.TimeUnit (MicroSeconds(MicroSeconds), TimeUnit, convert)
+import Polysemy.Time.Data.TimeUnit (MicroSeconds (MicroSeconds), TimeUnit, convert)
 
 uSleep ::
   Member (Embed IO) r =>
diff --git a/lib/Prelude.hs b/lib/Prelude.hs
--- a/lib/Prelude.hs
+++ b/lib/Prelude.hs
@@ -1,3 +1,6 @@
+{-# options_haddock prune, hide #-}
+
+-- |Prelude, Internal
 module Prelude (
   module Polysemy.Time.Prelude,
 ) where
diff --git a/polysemy-time.cabal b/polysemy-time.cabal
--- a/polysemy-time.cabal
+++ b/polysemy-time.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-time
-version:        0.2.0.1
+version:        0.2.0.2
 synopsis:       Polysemy Effect for Time
 description:    Please see the readme on Github at <https://github.com/tek/polysemy-time>
 category:       Time
@@ -104,7 +104,7 @@
   build-depends:
       aeson >=1.4
     , base ==4.*
-    , polysemy >=1.3
+    , polysemy >=1.4
     , relude >=0.7
     , string-interpolate >=0.2
     , template-haskell
