diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,24 +1,34 @@
 # simple-units
-A Haskell library for simple arithmetic with SI units using type-checked dimensional analysis.
+A Haskell library for simple arithmetic with SI units using type-checked dimensional analysis. 
 
+[Haddock documentation](groscoe.github.io/simple-units/)
+
+View on [hackage](https://hackage.haskell.org/package/simple-units).
+
+# Example
+
 ```haskell
 >>> let newton = kilogram .* meter ./ (second .* second)
 >>> 23*newton
 23.0 kg*m/s^2
+
 >>> let g = 6.67408e-11 * newton .* (meter .* meter) ./ (kilogram .* kilogram)
 >>> g -- gravitational constant
 6.67408e-11 m^3/kg*s^2
+
 >>> let gravity m1 m2 r = g .* (m1 * kilogram) .* (m2 * kilogram) ./ (r*meter .* r*meter)
 >>> let earth_mass = 5.972e24 * kilogram
 >>> let mars_mass = 6.417e23 * kilogram
 >>> let earth_radius = 6371 * kilo meter
->>> let mars_radius = 3389.5 * kio meter
+>>> let mars_radius = 3389.5 * kilo meter
 >>> let weight_on_earth mass = gravity mass earth_mass earth_radius
 >>> let weight_on_mars mass = gravity mass mars_mass mars_radius
 >>> weight_on_earth (80 * kilogram)
 785.5719790179963 kg*m/s^2
+
 >>> weight_on_mars (80 * kilogram)
 298.22370259533704 kg*m/s^2
+
 >>> weight_on_mars 1 ./ weight_on_earth 1
 0.3796261966575378 <adimensional>
 ```
diff --git a/simple-units.cabal b/simple-units.cabal
--- a/simple-units.cabal
+++ b/simple-units.cabal
@@ -1,44 +1,51 @@
-cabal-version: 1.12
+cabal-version:      1.12
+name:               simple-units
+version:            1.0.2
+license:            MIT
+license-file:       LICENSE
+copyright:          2019 Gustavo Roscoe
+maintainer:         gustavo@gustavoroscoe.com
+author:             Gustavo Roscoe
+homepage:           https://github.com/groscoe/simple-units#readme
+bug-reports:        https://github.com/groscoe/simple-units/issues
+synopsis:
+    Simple arithmetic with SI units using type-checked dimensional analysis.
 
--- This file has been generated from package.yaml by hpack version 0.31.1.
---
--- see: https://github.com/sol/hpack
---
--- hash: 86a74ca99a7b7499b1457b5625c7a799cd079870b8c85fb735b58c6d7d53728d
+description:
+    Please see the README on GitHub at <https://github.com/groscoe/simple-units#readme>
 
-name:           simple-units
-version:        1.0.1.1
-synopsis:       Simple arithmetic with SI units using type-checked dimensional analysis.
-description:    Please see the README on GitHub at <https://github.com/groscoe/simple-units#readme>
-category:       Numeric, Numerical
-homepage:       https://github.com/groscoe/simple-units#readme
-bug-reports:    https://github.com/groscoe/simple-units/issues
-author:         Gustavo Roscoe
-maintainer:     gustavo@gustavoroscoe.com
-copyright:      2019 Gustavo Roscoe
-license:        MIT
-license-file:   LICENSE
-build-type:     Simple
-extra-source-files:
-    README.md
+category:           Numeric, Numerical
+build-type:         Simple
+extra-source-files: README.md
 
 source-repository head
-  type: git
-  location: https://github.com/groscoe/simple-units
+    type:     git
+    location: https://github.com/groscoe/simple-units
 
 library
-  exposed-modules:
-      Units.Simple
-  other-modules:
-      Units.Simple.Arithmetic
-      Units.Simple.Internals
-      Units.Simple.Quantity
-      Units.Simple.Unit
-      Paths_simple_units
-  hs-source-dirs:
-      src
-  ghc-options: -Wall -Wcompat
-  build-depends:
-      base >=4.9 && <5
-    , first-class-families >=0.5 && <0.6
-  default-language: Haskell2010
+    exposed-modules:  Units.Simple
+    hs-source-dirs:   src
+    other-modules:
+        Units.Simple.Arithmetic
+        Units.Simple.Internals
+        Units.Simple.Quantity
+        Units.Simple.Unit
+        Paths_simple_units
+
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wcompat
+    build-depends:
+        base >=4.9 && <5,
+        first-class-families >=0.4 && <0.9
+
+test-suite simple-units-test
+    type:             exitcode-stdio-1.0
+    main-is:          Spec.hs
+    hs-source-dirs:   test
+    other-modules:    Paths_simple_units
+    default-language: Haskell2010
+    ghc-options:      -threaded -rtsopts -with-rtsopts=-N
+    build-depends:
+        base >=4.12.0.0 && <4.13,
+        doctest >=0.16.0.1 && <0.17,
+        simple-units -any
diff --git a/src/Units/Simple.hs b/src/Units/Simple.hs
--- a/src/Units/Simple.hs
+++ b/src/Units/Simple.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE DataKinds #-}
 module Units.Simple
   (-- *The @Quantity@ type
     Quantity ()
@@ -24,6 +23,7 @@
   --
   -- Examples:
   --
+  -- >>> import Units.Simple
   -- >>> 273.0*kelvin -- unitary form
   -- 273.0 K
   -- >>> kelvin' 273.0 -- function form
@@ -111,7 +111,7 @@
 -- 6 <adimensional>
 -- >>> adim .+ meter
 -- <BLANKLINE>
--- <interactive>:79:1-13: error:
+-- <interactive>... error:
 --     • Unit mismatch: <adimensional> and m
 --     • In the expression: adim .+ meter
 --       In an equation for ‘it’: it = adim .+ meter
diff --git a/src/Units/Simple/Arithmetic.hs b/src/Units/Simple/Arithmetic.hs
--- a/src/Units/Simple/Arithmetic.hs
+++ b/src/Units/Simple/Arithmetic.hs
@@ -1,9 +1,9 @@
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
 module Units.Simple.Arithmetic
   ( (.+)
   , (.-)
@@ -96,11 +96,12 @@
 --
 -- Examples:
 --
+-- >>> import Units.Simple
 -- >>> 2 * kilo meter .+ 3 * kilo meter
 -- 5000 m
 -- >>> 2*meter .+ 1*second
 -- <BLANKLINE>
--- <interactive>:16:1-19: error:
+-- <interactive>... error:
 --     • Unit mismatch: m and s
 --     • In the expression: 2 * meter .+ 1 * second
 --       In an equation for ‘it’: it = 2 * meter .+ 1 * second
@@ -113,6 +114,7 @@
 --
 -- Examples:
 --
+-- >>> import Units.Simple
 -- >>> let newton = kilogram .* meter ./ (second .* second)
 -- >>> 10*newton - 2*newton
 -- 8.0 kg*m/s^2
@@ -124,6 +126,7 @@
 --
 -- Examples:
 --
+-- >>> import Units.Simple
 -- >>> meter .* meter
 -- 1 m^2
 -- >>> let mps = meter ./ second
@@ -146,6 +149,7 @@
 --
 -- Examples:
 --
+-- >>> import Units.Simple
 -- >>> let coulomb = second .* ampere
 -- >>> 20*coulomb ./ 2*second
 -- 10.0 A
diff --git a/src/Units/Simple/Internals.hs b/src/Units/Simple/Internals.hs
--- a/src/Units/Simple/Internals.hs
+++ b/src/Units/Simple/Internals.hs
@@ -1,8 +1,8 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
 module Units.Simple.Internals where
 
 import GHC.TypeLits hiding (type (<=))
@@ -44,19 +44,23 @@
 type instance Eval (a % b) = a `TL.Mod` b
 
 data Show' :: a -> Exp Symbol
-type instance Eval (Show' (n :: Nat)) = Eval (Guarded n
-  '[ Flip (Fcf.<=) 9 ':= NatToDigit n
-   , Otherwise ':= Show' (Eval (n / 10)) <> Show' (Eval (n % 10))
-   ])
+type instance Eval (Show' (n :: Nat)) =
+  Eval (
+    If (Eval ((Fcf.<=) n 9))
+       (NatToDigit n)
+       (Show' (Eval (n / 10)) <> Show' (Eval (n % 10)))
+  )
 
 
 data (<=) :: k -> k -> Exp Bool
 type instance Eval ((a :: Nat) <= (b :: Nat)) = a <=? b
-type instance Eval ((a :: Symbol) <= (b :: Symbol)) = Eval (Guarded (CmpSymbol a b)
-  '[ TyEq 'EQ ':= Pure 'True
-   , TyEq 'LT ':= Pure 'True
-   , Otherwise ':= Pure 'False
-   ])
+type instance Eval ((a :: Symbol) <= (b :: Symbol)) =
+  Eval (
+    If (Eval (TyEq 'GT (CmpSymbol a b)))
+       (Pure 'False)
+       (Pure 'True)
+  )
+
 type instance Eval ('(a, _) <= '(b, _)) = Eval (a <= b)
 
 
diff --git a/src/Units/Simple/Quantity.hs b/src/Units/Simple/Quantity.hs
--- a/src/Units/Simple/Quantity.hs
+++ b/src/Units/Simple/Quantity.hs
@@ -21,6 +21,7 @@
 --
 -- Examples:
 --
+-- >>> import Units.Simple
 -- >>> meter -- a unitary quantity associated to meters.
 -- 1 m
 -- >>> 2.5*ampere -- constructing through literal arithmetic
diff --git a/test/Spec.hs b/test/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test/Spec.hs
@@ -0,0 +1,10 @@
+import Test.DocTest
+
+main :: IO ()
+main = doctest
+  [ "-isrc"
+  , "src/Units/Simple.hs"
+  , "src/Units/Simple/Arithmetic.hs"
+  , "src/Units/Simple/Quantity.hs"
+  , "src/Units/Simple/Unit.hs"
+  ]
