diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,13 @@
+# Change log
+
+This package uses [Semantic Versioning][1].
+
+## v0.2.0.0
+
+- Add `USAGE.txt` to tarball: #2
+
+## v0.1.0.0
+
+-   Initially created.
+
+[1]: http://semver.org/spec/v2.0.0.html
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,62 @@
+<h1 align="center">
+    <a href="https://github.com/rubik/argon">
+        Argon
+    </a>
+</h1>
+
+<p align="center">
+    <a href="https://travis-ci.org/rubik/argon">
+        <img alt="Tests"
+             src="https://img.shields.io/travis/rubik/argon.svg?style=flat-square">
+    </a>
+    <a href="https://github.com/rubik/argon/blob/master/LICENSE">
+        <img alt="License"
+             src="https://img.shields.io/badge/license-ISC-blue.svg?style=flat-square">
+    </a>
+    <a href="https://hackage.haskell.org/package/argon">
+        <img alt="Version"
+             src="https://img.shields.io/hackage/v/argon.svg?label=version&amp;style=flat-square">
+    </a>
+</p>
+
+<p align="center">
+    Argon measures your code's cyclomatic complexity.
+</p>
+
+<p align="center">
+    <img alt="Argon screenshot"
+         src="https://cloud.githubusercontent.com/assets/238549/10630521/5a60346c-77d7-11e5-8e87-373bec72e777.png">
+</p>
+
+<hr>
+
+### Installing
+
+Simple as ``stack install argon`` or ``cabal install argon``.
+
+### Running
+
+The Argon executable expects a list of file paths:
+
+    $ argon --no-color src/**/*.hs
+    src/Argon/Formatters.hs
+        47:1 formatResult - 3
+        33:1 coloredFunc - 2
+        27:1 fore - 1
+        37:1 coloredRank - 1
+    src/Argon/Parser.hs
+        51:1 parseCode - 2
+        44:1 handleExc - 1
+    src/Argon/Results.hs
+        17:1 filterResults - 2
+        22:1 export - 2
+    src/Argon/Visitor.hs
+        35:1 visitExp - 5
+        42:1 visitOp - 4
+        14:1 funCC - 3
+        16:11 name - 2
+        11:1 funcsCC - 1
+        20:1 sumWith - 1
+        23:1 complexity - 1
+        28:11 descend - 1
+        32:11 inspect - 1
diff --git a/USAGE.txt b/USAGE.txt
new file mode 100644
--- /dev/null
+++ b/USAGE.txt
@@ -0,0 +1,8 @@
+Usage:
+    argon [-h] [--no-color | --json] [-m=<min>] <paths>...
+
+Options:
+    -h --help       show this help
+    -m --min=<n>    the minimum complexity to show in results
+    --no-color      results are not colored
+    -j --json       results are serialized to JSON
diff --git a/argon.cabal b/argon.cabal
--- a/argon.cabal
+++ b/argon.cabal
@@ -1,5 +1,5 @@
 name:                argon
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Measure your code's complexity
 homepage:            http://github.com/rubik/argon
 bug-reports:         http://github.com/rubik/argon/issues
@@ -18,6 +18,11 @@
     .
     The intended usage is through Argon's executable, which accepts a list of
     file paths to analyze. The data can be optionally exported to JSON.
+extra-source-files:
+    stack.yaml
+    README.md
+    CHANGELOG.md
+    USAGE.txt
 
 library
   hs-source-dirs:      src
diff --git a/src/Argon.hs b/src/Argon.hs
--- a/src/Argon.hs
+++ b/src/Argon.hs
@@ -11,7 +11,7 @@
     (
     -- * Types
       AnalysisResult
-    , ComplexityBlock
+    , ComplexityBlock(CC)
     , OutputMode(..)
     , Config(..)
     -- * Parsing
diff --git a/src/Argon/Formatters.hs b/src/Argon/Formatters.hs
--- a/src/Argon/Formatters.hs
+++ b/src/Argon/Formatters.hs
@@ -14,14 +14,14 @@
 bareTextFormatter = formatSingle $ formatResult
     (printf "%s\n\t%s")
     (\e -> "error:" ++ e)
-    (\(l, c, func, cc) -> printf "%d:%d %s - %d" l c func cc)
+    (\(CC (l, c, func, cc)) -> printf "%d:%d %s - %d" l c func cc)
 
 coloredTextFormatter :: [(FilePath, AnalysisResult)] -> String
 coloredTextFormatter = formatSingle $ formatResult
     (\name rest -> printf "%s%s%s\n\t%s%s" open name reset rest reset)
     (\e -> printf "%serror%s: %s%s" (fore Red) reset e reset)
-    (\(l, c, func, cc) -> printf "%d:%d %s - %s%s" l c (coloredFunc func c)
-                            (coloredRank cc) reset)
+    (\(CC (l, c, func, cc)) -> printf "%d:%d %s - %s%s" l c (coloredFunc func c)
+                               (coloredRank cc) reset)
 
 jsonFormatter :: [(FilePath, AnalysisResult)] -> String
 jsonFormatter = B.unpack . encode
diff --git a/src/Argon/Results.hs b/src/Argon/Results.hs
--- a/src/Argon/Results.hs
+++ b/src/Argon/Results.hs
@@ -18,7 +18,7 @@
 --     2. line number (ascending)
 --     3. function name (alphabetically)
 order :: [ComplexityBlock] -> [ComplexityBlock]
-order = sortOn (\(l, _, f, cc) -> (-cc, l, f))
+order = sortOn (\(CC (l, _, f, cc)) -> (-cc, l, f))
 
 -- | Filter the results of the analysis, with respect to the given
 --   'ResultsOptions'.
@@ -27,7 +27,7 @@
               -> (FilePath, AnalysisResult)
 filterResults _ (s, Left msg) = (s, Left msg)
 filterResults o (s, Right rs) =
-    (s, Right $ order [r | r@(_, _, _, cc) <- rs, cc >= minCC o])
+    (s, Right $ order [r | r@(CC (_, _, _, cc)) <- rs, cc >= minCC o])
 
 -- | Export analysis' results. How to export the data is defined by the
 --   'ResultsOptions'.
diff --git a/src/Argon/Types.hs b/src/Argon/Types.hs
--- a/src/Argon/Types.hs
+++ b/src/Argon/Types.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
 
-module Argon.Types (ComplexityBlock, AnalysisResult, Config(..)
+module Argon.Types (ComplexityBlock(CC), AnalysisResult, Config(..)
                    , OutputMode(..))
     where
 
@@ -11,14 +11,15 @@
 
 -- | Hold the data associated to a function binding:
 --   (line number, column, function name, complexity).
-type ComplexityBlock = (Int, Int, String, Int)
+newtype ComplexityBlock = CC (Int, Int, String, Int)
+                        deriving (Show, Eq, Ord)
 
 instance ToJSON ComplexityBlock where
-    toJSON (l, c, func, cc) = object [ "lineno"     .= l
-                                     , "col"        .= c
-                                     , "name"       .= func
-                                     , "complexity" .= cc
-                                     ]
+    toJSON (CC (l, c, func, cc)) = object [ "lineno"     .= l
+                                          , "col"        .= c
+                                          , "name"       .= func
+                                          , "complexity" .= cc
+                                          ]
 
 -- | Represent the result of the analysis of one file.
 --   It can either be an error message or a list of
diff --git a/src/Argon/Visitor.hs b/src/Argon/Visitor.hs
--- a/src/Argon/Visitor.hs
+++ b/src/Argon/Visitor.hs
@@ -4,7 +4,7 @@
 import Data.Data (Data)
 import Data.Generics.Uniplate.Data (childrenBi, universeBi)
 import Language.Haskell.Exts.Syntax
-import Argon.Types (ComplexityBlock)
+import Argon.Types (ComplexityBlock(..))
 
 
 -- | Compute cyclomatic complexity of every function binding in the given AST.
@@ -12,8 +12,8 @@
 funcsCC ast = map funCC [matches | FunBind matches <- universeBi ast]
 
 funCC :: [Match] -> ComplexityBlock
-funCC [] = (0, 0, "<unknown>", 0)
-funCC ms@(Match (SrcLoc _ l c) n _ _ _ _:_) = (l, c, name n, complexity ms)
+funCC [] = CC (0, 0, "<unknown>", 0)
+funCC ms@(Match (SrcLoc _ l c) n _ _ _ _:_) = CC (l, c, name n, complexity ms)
     where name (Ident s)   = s
           name (Symbol s) = s
 
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,7 @@
+flags: {}
+extra-package-dbs: []
+packages:
+- '.'
+extra-deps:
+- docopt-0.7.0.4
+resolver: lts-3.9
diff --git a/test/ArgonSpec.hs b/test/ArgonSpec.hs
--- a/test/ArgonSpec.hs
+++ b/test/ArgonSpec.hs
@@ -1,12 +1,23 @@
+{-# LANGUAGE CPP #-}
 module ArgonSpec (spec)
     where
 
 import Data.List (sort)
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative ((<$>), (<*>))
+#endif
 import Test.Hspec
 import Test.QuickCheck
 import Argon
 
+instance Arbitrary ComplexityBlock where
+    arbitrary = (\a b c d -> CC (a, b, c, d)) <$> arbitrary
+                                              <*> arbitrary
+                                              <*> arbitrary
+                                              <*> arbitrary
+    shrink (CC t) = map CC $ shrink t
 
+
 shouldParse :: String -> AnalysisResult -> Expectation
 shouldParse s r = parseCode (Just "fname") s `shouldReturn` ("fname", r)
 
@@ -16,14 +27,14 @@
         it "does not error on empty list" $
             order [] `shouldBe` []
         it "orders by complexity (descending)" $
-            order [(1, 1, "f", 1), (2, 1, "f", 2)] `shouldBe`
-                [(2, 1, "f", 2), (1, 1, "f", 1)]
+            order [CC (1, 1, "f", 1), CC (2, 1, "f", 2)] `shouldBe`
+                [CC (2, 1, "f", 2), CC (1, 1, "f", 1)]
         it "orders by lines (ascending)" $
-            order [(11, 1, "f", 3), (1, 1, "f", 3)] `shouldBe`
-                [(1, 1, "f", 3), (11, 1, "f", 3)]
+            order [CC (11, 1, "f", 3), CC (1, 1, "f", 3)] `shouldBe`
+                [CC (1, 1, "f", 3), CC (11, 1, "f", 3)]
         it "orders by function name (ascending)" $
-            order [(11, 1, "g", 3), (11, 1, "f", 3)] `shouldBe`
-                [(11, 1, "f", 3), (11, 1, "g", 3)]
+            order [CC (11, 1, "g", 3), CC (11, 1, "f", 3)] `shouldBe`
+                [CC (11, 1, "f", 3), CC (11, 1, "g", 3)]
         it "does not remove or add elements" $
             property $ \xs -> sort xs == sort (order xs)
     describe "parseCode" $ do
@@ -31,7 +42,7 @@
             unlines [ "f n = case n of"
                     , "        2 -> 24"
                     , "        3 -> 27"
-                    , "        _ -> 49"] `shouldParse` Right [(1, 1, "f", 3)]
+                    , "        _ -> 49"] `shouldParse` Right [CC (1, 1, "f", 3)]
         it "accounts for if..then..else" $
             "f n = if n == 4 then 24 else 20" `shouldParse`
-                Right [(1, 1, "f", 2)]
+                Right [CC (1, 1, "f", 2)]
