diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.4.1
+
+* Fix missing `tests/Tutorial.hs` module in package archive uploaded to Hackage
+
 1.4.0
 
 * BREAKING CHANGE TO THE LANGUAGE AND API: You can now supply custom headers for
diff --git a/dhall.cabal b/dhall.cabal
--- a/dhall.cabal
+++ b/dhall.cabal
@@ -1,5 +1,5 @@
 Name: dhall
-Version: 1.4.0
+Version: 1.4.1
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 Tested-With: GHC == 7.10.2, GHC == 8.0.1
@@ -130,6 +130,7 @@
     Other-Modules:
         Examples
         Normalization
+        Tutorial
         Util
     Build-Depends:
         base               >= 4        && < 5   ,
diff --git a/tests/Tutorial.hs b/tests/Tutorial.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tutorial.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes       #-}
+
+module Tutorial where
+
+import qualified NeatInterpolation
+import qualified Test.Tasty
+import qualified Test.Tasty.HUnit
+import qualified Util
+
+import Test.Tasty (TestTree)
+
+tutorialTests :: TestTree
+tutorialTests =
+    Test.Tasty.testGroup "tutorial"
+        [ Test.Tasty.testGroup "Interpolation"
+            [ _Interpolation_0
+            , _Interpolation_1
+            ]
+        ]
+
+_Interpolation_0 :: TestTree
+_Interpolation_0 = Test.Tasty.HUnit.testCase "Example #0" (do
+    e <- Util.code [NeatInterpolation.text|
+    let name = "John Doe"
+in  let age  = 21
+in  "My name is $${name} and my age is $${Integer/show age}"
+|]
+    Util.assertNormalizesTo e "\"My name is John Doe and my age is 21\"" )
+
+_Interpolation_1 :: TestTree
+_Interpolation_1 = Test.Tasty.HUnit.testCase "Example #0" (do
+    e <- Util.code [NeatInterpolation.text|
+''
+    for file in *; do
+      echo "Found ''$${file}"
+    done
+''
+|]
+    Util.assertNormalized e )
