diff --git a/language-elm.cabal b/language-elm.cabal
--- a/language-elm.cabal
+++ b/language-elm.cabal
@@ -1,5 +1,5 @@
 name:               language-elm
-version:            0.0.8.0
+version:            0.0.9.0
 synopsis:           Generate elm code
 description:        Generate elm code from an ast
 homepage:           https://github.com/eliaslfox/language-elm#readme
@@ -15,7 +15,7 @@
 
 library
   hs-source-dirs:   src
-  exposed-modules:  Elm.Expression, Elm.Decleration, Elm.Type, Elm.Import, Elm.Program
+  exposed-modules:    Elm.Decleration, Elm.Expression, Elm.Import, Elm.Program, Elm.Type
   build-depends:    base >= 4.7 && < 5, 
                        pretty,
                        MissingH
diff --git a/src/Elm/Decleration.hs b/src/Elm/Decleration.hs
--- a/src/Elm/Decleration.hs
+++ b/src/Elm/Decleration.hs
@@ -1,12 +1,19 @@
+{-# OPTIONS_HADDOCK prune #-}
+
+-- | Top level declerations
 module Elm.Decleration where
 
 import Elm.Type
 import Elm.Expression
 import Text.PrettyPrint
 
+-- | Used to declare functions, variables, and types
 data Dec
+    -- | Declare a function
     = Dec String TypeDec [Expr] Expr
+    -- | Declare a type
     | DecType String [String] [(String, [TypeDec])]
+    -- | Declare a type alias
     | DecTypeAlias String [String] TypeDec
 
 toDocD :: Dec -> Doc
diff --git a/src/Elm/Expression.hs b/src/Elm/Expression.hs
--- a/src/Elm/Expression.hs
+++ b/src/Elm/Expression.hs
@@ -1,24 +1,38 @@
+{-# OPTIONS_HADDOCK prune #-}
+
+-- | Used to declare expressions
 module Elm.Expression where
 
 import Text.PrettyPrint hiding (Str)
 import Data.Maybe
 
+-- | The expression type
 data Expr
+    -- | Function application
     = App String [Expr]
     | Case Expr [(Expr, Expr)]
     | Let Expr [(Expr, Expr)] 
     | List [Expr]
     | Tuple2 Expr Expr
     | Tuple3 Expr Expr Expr
+    -- | Inline operators
     | Op String Expr Expr
+    -- | Expressions wrapped in parens
     | Parens Expr
+    -- | String literals
     | Str String
+    -- | Integer literals
     | Int Int
+    -- | The underscore placeholder
     | Under
+    -- | Boolean false literal
     | BoolTrue
+    -- | Boolean true literal
     | BoolFalse
+    -- | Record creation and update syntax
     | Record (Maybe Expr) [(String, Expr)]
 
+-- | Shortcut for variables
 var :: String -> Expr
 var str = App str []
 
diff --git a/src/Elm/Import.hs b/src/Elm/Import.hs
--- a/src/Elm/Import.hs
+++ b/src/Elm/Import.hs
@@ -1,17 +1,23 @@
+{-# OPTIONS_HADDOCK prune #-}
+
+-- | Ast for expressing imports
 module Elm.Import where
 
 import Text.PrettyPrint
 
+-- | Possible ways to expose an import
 data ImportType
     = Everything
     | Select [ImportItem]
     | ExposeNothing
 
+-- | Possible ways to expose a sub import
 data ImportItem 
     = Item String
     | ItemExposing String [String]
     | ItemEvery String
 
+-- | A full import
 data Import = Import String (Maybe String) ImportType
 
 docItem :: ImportItem -> Doc
diff --git a/src/Elm/Program.hs b/src/Elm/Program.hs
--- a/src/Elm/Program.hs
+++ b/src/Elm/Program.hs
@@ -1,3 +1,6 @@
+{-# OPTIONS_HADDOCK prune #-}
+
+-- | Module for creating a program
 module Elm.Program where
 
 import Elm.Import
@@ -6,6 +9,7 @@
 import Data.String.Utils
 import Data.List
 
+-- | Program type
 data Program = Program String ImportType [Import] [Dec]
 
 genProgram :: Program -> Doc
@@ -14,6 +18,7 @@
     $+$ (foldl ($+$) empty . map toDocI $ imports)
     $+$ (foldl ($+$) empty . map toDocD $ declerations)
 
+-- | Convert a program to a string of code
 renderProgram :: Program -> String
 renderProgram program =
     let 
diff --git a/src/Elm/Type.hs b/src/Elm/Type.hs
--- a/src/Elm/Type.hs
+++ b/src/Elm/Type.hs
@@ -1,16 +1,25 @@
+{-# OPTIONS_HADDOCK prune #-}
 {-# LANGUAGE OverloadedStrings #-} 
+
+-- | Ast for declaring types
 module Elm.Type where
 
 import Elm.Expression
 import Text.PrettyPrint
 import Data.Maybe
 
+-- | Data type to represent types
 data TypeDec
+    -- | A type with type paramaters
     = Params String [TypeDec]
+    -- | A function type
     | TApp [TypeDec]
+    -- | A two tuple type
     | TTuple2 TypeDec TypeDec
+    -- | A record type
     | TRecord (Maybe String) [(String, TypeDec)]
 
+-- | Shortcut for declaring a type variable
 tvar :: String -> TypeDec
 tvar str =
     Params str []
