diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.4.2
+
+* Fix missing `Prelude` files in package archive uploaded to Hackage
+
 1.4.1
 
 * Fix missing `tests/Tutorial.hs` module in package archive uploaded to Hackage
diff --git a/Prelude/Optional/all b/Prelude/Optional/all
new file mode 100644
--- /dev/null
+++ b/Prelude/Optional/all
@@ -0,0 +1,19 @@
+{-
+Returns `False` if the supplied function returns `False` for a present element
+and `True` otherwise:
+
+Examples:
+
+```
+./all Natural Natural/even ([+3] : Optional Natural) = False
+
+./all Natural Natural/even ([] : Optional Natural) = True
+```
+-}
+let all : ∀(a : Type) → (a → Bool) → Optional a → Bool
+    =   λ(a : Type)
+    →   λ(f : a → Bool)
+    →   λ(xs : Optional a)
+    →   Optional/fold a xs Bool f True
+
+in  all
diff --git a/Prelude/Optional/any b/Prelude/Optional/any
new file mode 100644
--- /dev/null
+++ b/Prelude/Optional/any
@@ -0,0 +1,19 @@
+{-
+Returns `True` if the supplied function returns `True` for a present element and
+`False` otherwise
+
+Examples:
+
+```
+./any Natural Natural/even ([+2] : Optional Natural) = True
+
+./any Natural Natural/even ([] : Optional Natural) = False
+```
+-}
+let any : ∀(a : Type) → (a → Bool) → Optional a → Bool
+    =   λ(a : Type)
+    →   λ(f : a → Bool)
+    →   λ(xs : Optional a)
+    →   Optional/fold a xs Bool f False
+
+in  any
diff --git a/Prelude/Optional/filter b/Prelude/Optional/filter
new file mode 100644
--- /dev/null
+++ b/Prelude/Optional/filter
@@ -0,0 +1,31 @@
+{-
+Only keep an `Optional` element if the supplied function returns `True`
+
+Examples:
+
+```
+./filter Natural Natural/even ([+2] : Optional Natural)
+= [+2] : Optional Natural
+
+./filter Natural Natural/odd ([+2] : Optional Natural)
+= [] : Optional Natural
+```
+-}
+let filter : ∀(a : Type) → (a → Bool) → Optional a -> Optional a
+    =   λ(a : Type)
+    →   λ(f : a → Bool)
+    →   λ(xs : Optional a)
+    →   Optional/build
+        a
+        (   λ(optional : Type)
+        →   λ(just : a → optional)
+        →   λ(nil : optional)
+        →   Optional/fold
+            a
+            xs
+            optional
+            (λ(x : a) → if f x then just x else nil)
+            nil
+        )
+
+in  filter
diff --git a/Prelude/Optional/length b/Prelude/Optional/length
new file mode 100644
--- /dev/null
+++ b/Prelude/Optional/length
@@ -0,0 +1,17 @@
+{-
+Returns `+1` if the `Optional` value is present and `+0` if the value is absent
+
+Examples:
+
+```
+./length Integer ([2] : Optional Integer) = +1
+
+./length Integer ([] : Optional Integer) = +0
+```
+-}
+let length : ∀(a : Type) → Optional a → Natural
+    =   λ(a : Type)
+    →   λ(xs : Optional a)
+    →   Optional/fold a xs Natural (λ(_ : a) → +1) +0
+
+in  length
diff --git a/Prelude/Optional/null b/Prelude/Optional/null
new file mode 100644
--- /dev/null
+++ b/Prelude/Optional/null
@@ -0,0 +1,17 @@
+{-
+Returns `True` if the `Optional` value is absent and `False` if present
+
+Examples:
+
+```
+./null Integer ([2] : Optional Integer) = False
+
+./null Integer ([] : Optional Integer) = True
+```
+-}
+let null : ∀(a : Type) → Optional a → Bool
+    =   λ(a : Type)
+    →   λ(xs : Optional a)
+    →   Optional/fold a xs Bool (λ(_ : a) → False) True
+
+in  null
diff --git a/Prelude/Text/concatMap b/Prelude/Text/concatMap
new file mode 100644
--- /dev/null
+++ b/Prelude/Text/concatMap
@@ -0,0 +1,20 @@
+{-
+Transform each value in a `List` into `Text` and concatenate the result
+
+Examples:
+
+```
+./concatMap Integer (λ(n : Integer) → "${Integer/show n} ") [0, 1, 2]
+= "0 1 2 "
+
+./concatMap Integer (λ(n : Integer) → "${Integer/show n} ") ([] : List Integer)
+= ""
+```
+-}
+let concatMap : ∀(a : Type) → (a → Text) → List a → Text
+    =   λ(a : Type)
+    →   λ(f : a → Text)
+    →   λ(xs : List a)
+    →   List/fold a xs Text (λ(x : a) → λ(y : Text) → f x ++ y) ""
+
+in  concatMap
diff --git a/Prelude/Text/concatMapSep b/Prelude/Text/concatMapSep
new file mode 100644
--- /dev/null
+++ b/Prelude/Text/concatMapSep
@@ -0,0 +1,47 @@
+{-
+Transform each value in a `List` to `Text` and then concatenate them with a
+separator in between each value
+
+Examples:
+
+```
+./concatMapSep ", " Integer Integer/show [0, 1, 2] = "0, 1, 2"
+
+./concatMapSep ", " Integer Integer/show ([] : List Integer) = ""
+```
+-}
+let concatMapSep
+    :   ∀(separator : Text) → ∀(a : Type) → (a → Text) → List a → Text
+    =   λ(separator : Text)
+    →   λ(a : Type)
+    →   λ(f : a → Text)
+    →   λ(elements : List a)
+    →   let status
+            =   List/fold
+                a
+                elements
+                < Empty : {} | NonEmpty : Text >
+                (   λ(element : a)
+                →   λ(status : < Empty : {} | NonEmpty : Text >)
+                →   merge
+                    {   Empty
+                        =   λ(_ : {})
+                        →   < NonEmpty = f element
+                            | Empty : {}
+                            >
+                    ,   NonEmpty
+                        =   λ(result : Text)
+                        →   < NonEmpty = f element ++ separator ++ result
+                            | Empty : {}
+                            >
+                    }
+                    status : < Empty : {} | NonEmpty : Text >
+                )
+                < Empty = {=} | NonEmpty : Text >
+    in  merge
+        { Empty    = λ(_ : {}) → ""
+        , NonEmpty = λ(result : Text) → result
+        }
+        status : Text
+
+in  concatMapSep
diff --git a/Prelude/Text/concatSep b/Prelude/Text/concatSep
new file mode 100644
--- /dev/null
+++ b/Prelude/Text/concatSep
@@ -0,0 +1,43 @@
+{-
+Concatenate a `List` of `Text` values with a separator in between each value
+
+Examples:
+
+```
+./concatSep ", " ["ABC", "DEF", "GHI"] = "ABC, DEF, GHI"
+
+./concatSep ", " ([] : List Text) = ""
+```
+-}
+let concatSep : ∀(separator : Text) → ∀(elements : List Text) → Text
+    =   λ(separator : Text)
+    →   λ(elements : List Text)
+    →   let status
+            =   List/fold
+                Text
+                elements
+                < Empty : {} | NonEmpty : Text >
+                (   λ(element : Text)
+                →   λ(status : < Empty : {} | NonEmpty : Text >)
+                →   merge
+                    {   Empty
+                        =   λ(_ : {})
+                        →   < NonEmpty = element
+                            | Empty : {}
+                            >
+                    ,   NonEmpty
+                        =   λ(result : Text)
+                        →   < NonEmpty = element ++ separator ++ result
+                            | Empty : {}
+                            >
+                    }
+                    status : < Empty : {} | NonEmpty : Text >
+                )
+                < Empty = {=} | NonEmpty : Text >
+    in  merge
+        { Empty    = λ(_ : {}) → ""
+        , NonEmpty = λ(result : Text) → result
+        }
+        status : Text
+
+in  concatSep
diff --git a/dhall.cabal b/dhall.cabal
--- a/dhall.cabal
+++ b/dhall.cabal
@@ -1,5 +1,5 @@
 Name: dhall
-Version: 1.4.1
+Version: 1.4.2
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 Tested-With: GHC == 7.10.2, GHC == 8.0.1
@@ -63,15 +63,23 @@
     Prelude/Natural/show
     Prelude/Natural/sum
     Prelude/Natural/toInteger
+    Prelude/Optional/all
+    Prelude/Optional/any
     Prelude/Optional/build
     Prelude/Optional/concat
+    Prelude/Optional/filter
     Prelude/Optional/fold
     Prelude/Optional/head
     Prelude/Optional/last
+    Prelude/Optional/length
     Prelude/Optional/map
+    Prelude/Optional/null
     Prelude/Optional/toList
     Prelude/Optional/unzip
     Prelude/Text/concat
+    Prelude/Text/concatMap
+    Prelude/Text/concatMapSep
+    Prelude/Text/concatSep
 
 Source-Repository head
     Type: git
