diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # language-ats
 
+## 1.7.4.0
+
+  * Add `languageATSVersion`
+
 ## 1.7.3.1
 
   * Fix bug in parse order for `symintr` declarations
diff --git a/language-ats.cabal b/language-ats.cabal
--- a/language-ats.cabal
+++ b/language-ats.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            language-ats
-version:         1.7.3.1
+version:         1.7.4.0
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2018-2019 Vanessa McHale
@@ -50,6 +50,7 @@
         Language.ATS.Types
         Language.ATS.Types.Lens
         Language.ATS.Rewrite
+        Paths_language_ats
 
     default-language: Haskell2010
     other-extensions:
diff --git a/src/Language/ATS.hs b/src/Language/ATS.hs
--- a/src/Language/ATS.hs
+++ b/src/Language/ATS.hs
@@ -59,12 +59,15 @@
                     , constructorUniversals
                     , typeCall
                     , typeCallArgs
+                    -- * Misecellany
+                    , languageATSVersion
                     ) where
 
 import           Control.Composition          ((-$))
 import           Control.Monad
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.State
+import           Data.Version (Version)
 import           GHC.IO.Handle.FD             (stderr)
 import           Language.ATS.Lexer
 import           Language.ATS.Parser
@@ -73,7 +76,12 @@
 import           Language.ATS.Types
 import           Language.ATS.Types.Lens
 import           Lens.Micro
+import           Paths_language_ats (version)
 import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))
+
+-- | @since 1.7.4.0
+languageATSVersion :: Version
+languageATSVersion = version
 
 rewriteATS' :: Eq a => (ATS a, FixityState a) -> ATS a
 rewriteATS' (ATS ds, st) = ATS (rewriteDecl st <$> ds)
diff --git a/test/data/finger-tree.out b/test/data/finger-tree.out
new file mode 100644
--- /dev/null
+++ b/test/data/finger-tree.out
@@ -0,0 +1,30 @@
+datatype list(a: t@ype+) =
+  | cons of (a, list(a))
+  | nil
+
+fun concat {a:t@ype+} (list(a), list(a)) : list(a)
+
+typedef digit(a: t@ype+) = list(a)
+
+datatype node(a: t@ype) =
+  | node2 of (a, a)
+  | node3 of (a, a, a)
+
+datatype finger_tree(a: t@ype+) =
+  | empty
+  | single of (a)
+  | deep of (digit(a), finger_tree(node(a)), digit(a))
+
+symintr <| |>
+
+infixr 5 <|
+
+infixl 5 |>
+
+fun lcons {a:t@ype+} (a, finger_tree(a)) : finger_tree(a)
+
+fun rcons {a:t@ype+} (finger_tree(a), a) : finger_tree(a)
+
+overload <| with lcons
+
+overload |> with rcons
diff --git a/test/data/finger-tree.sats b/test/data/finger-tree.sats
new file mode 100644
--- /dev/null
+++ b/test/data/finger-tree.sats
@@ -0,0 +1,30 @@
+datatype list(a: t@ype+) =
+  | cons of (a, list(a))
+  | nil
+
+fun concat {a:t@ype+} (list(a), list(a)) : list(a)
+
+typedef digit(a: t@ype+) = list(a)
+
+datatype node(a: t@ype) =
+  | node2 of (a, a)
+  | node3 of (a, a, a)
+
+datatype finger_tree(a: t@ype+) =
+  | empty
+  | single of (a)
+  | deep of (digit(a), finger_tree(node(a)), digit(a))
+
+symintr <| |>
+
+infixr 5 <|
+
+infixl 5 |>
+
+fun lcons {a:t@ype+} (a, finger_tree(a)) : finger_tree(a)
+
+fun rcons {a:t@ype+} (finger_tree(a), a) : finger_tree(a)
+
+overload <| with lcons
+
+overload |> with rcons
