diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,4 +8,5 @@
 
 | `purescript` | `purescript-ast` |
 | --- | --- |
-| `0.13.6` | `0.1.0.0` |
+| `0.14.0` | `0.1.0.0` |
+| `0.14.1` | `0.1.1.0` |
diff --git a/purescript-ast.cabal b/purescript-ast.cabal
--- a/purescript-ast.cabal
+++ b/purescript-ast.cabal
@@ -1,7 +1,7 @@
-cabal-version:      1.12
+cabal-version:      2.4
 name:               purescript-ast
-version:            0.1.0.0
-license:            BSD3
+version:            0.1.1.0
+license:            BSD-3-Clause
 license-file:       LICENSE
 copyright:
     (c) 2013-17 Phil Freeman, (c) 2014-19 Gary Burgess, (c) other contributors (see CONTRIBUTORS.md)
@@ -11,7 +11,7 @@
 
 author:             Phil Freeman <paf31@cantab.net>
 stability:          experimental
-homepage:           http://www.purescript.org/
+homepage:           https://www.purescript.org/
 bug-reports:        https://github.com/purescript/purescript/issues
 synopsis:           PureScript Programming Language Abstract Syntax Tree
 description:
@@ -51,6 +51,7 @@
 
     hs-source-dirs:     src
     other-modules:      Paths_purescript_ast
+    autogen-modules:    Paths_purescript_ast
     default-language:   Haskell2010
     default-extensions:
         BangPatterns ConstraintKinds DataKinds DefaultSignatures
@@ -62,19 +63,19 @@
         OverloadedStrings ScopedTypeVariables TupleSections TypeFamilies
         ViewPatterns
 
-    ghc-options:        -Wall -O2
+    ghc-options:        -Wall
     build-depends:
-        aeson >=1.0 && <1.5,
-        base >=4.11 && <4.13,
-        base-compat >=0.6.0 && <0.11,
-        bytestring <0.11,
-        containers <0.7,
-        deepseq <1.5,
-        filepath <1.5,
-        microlens >=0.4.10 && <0.5,
-        mtl >=2.1.0 && <2.3.0,
-        protolude >=0.1.6 && <0.2.4,
-        scientific >=0.3.4.9 && <0.4,
-        serialise <0.3,
-        text <1.3,
-        vector <0.13
+        aeson >=1.5.6.0 && <1.6,
+        base >=4.14.1.0 && <4.15,
+        base-compat >=0.11.2 && <0.12,
+        bytestring >=0.10.12.0 && <0.11,
+        containers >=0.6.2.1 && <0.7,
+        deepseq >=1.4.4.0 && <1.5,
+        filepath >=1.4.2.1 && <1.5,
+        microlens >=0.4.11.2 && <0.5,
+        mtl >=2.2.2 && <2.3,
+        protolude >=0.3.0 && <0.4,
+        scientific >=0.3.6.2 && <0.4,
+        serialise >=0.2.3.0 && <0.3,
+        text >=1.2.4.1 && <1.3,
+        vector >=0.12.1.2 && <0.13
diff --git a/src/Language/PureScript/PSString.hs b/src/Language/PureScript/PSString.hs
--- a/src/Language/PureScript/PSString.hs
+++ b/src/Language/PureScript/PSString.hs
@@ -182,6 +182,7 @@
       , Char.ConnectorPunctuation
       , Char.DashPunctuation
       , Char.OpenPunctuation
+      , Char.ClosePunctuation
       , Char.InitialQuote
       , Char.FinalQuote
       , Char.OtherPunctuation
diff --git a/src/Language/PureScript/Types.hs b/src/Language/PureScript/Types.hs
--- a/src/Language/PureScript/Types.hs
+++ b/src/Language/PureScript/Types.hs
@@ -549,6 +549,12 @@
   go (TUnknown _ u) = IS.singleton u
   go _ = mempty
 
+containsUnknowns :: Type a -> Bool
+containsUnknowns = everythingOnTypes (||) go where
+  go :: Type a -> Bool
+  go TUnknown{} = True
+  go _ = False
+
 eraseKindApps :: Type a -> Type a
 eraseKindApps = everywhereOnTypes $ \case
   KindApp _ ty _ -> ty
