diff --git a/language-ats.cabal b/language-ats.cabal
--- a/language-ats.cabal
+++ b/language-ats.cabal
@@ -1,5 +1,5 @@
 name:                language-ats
-version:             0.1.1.7
+version:             0.1.1.8
 synopsis:            Parser and pretty-printer for ATS.
 description:         Parser and pretty-printer for [ATS](http://www.ats-lang.org/), written with Happy and Alex.
 license:             BSD3
diff --git a/src/Language/ATS/Parser.y b/src/Language/ATS/Parser.y
--- a/src/Language/ATS/Parser.y
+++ b/src/Language/ATS/Parser.y
@@ -461,6 +461,8 @@
           | Implicits lspecial TypeIn rbracket { $3 : $1 }
           | doubleBrackets { [[Named (Unqualified "")]] }
           | Implicits doubleBrackets { [Named (Unqualified "")] : $1 }
+          | lbracket TypeIn rbracket { [$2] }
+          | Implicits lspecial TypeIn rbracket { $3 : $1 }
           
 MaybeImplicit : Implicits { $1 }
               | { [] }
diff --git a/src/Language/ATS/Types.hs b/src/Language/ATS/Types.hs
--- a/src/Language/ATS/Types.hs
+++ b/src/Language/ATS/Types.hs
@@ -287,7 +287,7 @@
                 | ProofExpr AlexPosn Expression Expression
                 | TypeSignature Expression Type
                 | WhereExp Expression [Declaration]
-                | TupleEx AlexPosn [Expression]
+                | TupleEx AlexPosn [Expression] -- TODO support boxed tuples
                 | While AlexPosn Expression Expression
                 | Actions ATS
                 | Begin AlexPosn Expression
diff --git a/test/data/dhall-ats.dats b/test/data/dhall-ats.dats
new file mode 100644
--- /dev/null
+++ b/test/data/dhall-ats.dats
@@ -0,0 +1,42 @@
+#include ".atspkg/contrib/hs-bind-0.3.6/runtime.dats"
+#include "share/atspre_staload.hats"
+
+staload UN = "prelude/SATS/unsafe.sats"
+staload "src/gen.sats"
+
+fun free_option(x : option(int)) : void =
+  case+ x of
+    | ~Some (_) => ()
+    | ~None() => ()
+
+fun print_pair(x : pair(int, int)) : void =
+  let
+    val f = x.first
+    val s = x.second
+  in
+    println!("Pair { first = ", f, ", second = ", s, " }")
+  end
+
+fun print_option_int(x : !option(int)) : void =
+  case+ x of
+    | Some (n) => (print("Some") ; println!(n))
+    | None() => println!("None")
+
+extern
+fun hs_pass() : ptr =
+  "mac#pass_val"
+
+extern
+fun hs_read() : ptr =
+  "mac#read_dhall"
+
+implement main0 (argc, argv) =
+  {
+    val _ = hs_init(argc, argv)
+    var x = $UN.ptr0_get<option(int)>(hs_read())
+    val y = $UN.ptr0_get<pair(int, int)>(hs_pass())
+    val _ = print_pair(y)
+    val _ = print_option_int(x)
+    val _ = free_option(x)
+    val _ = hs_exit()
+  }
diff --git a/test/data/dhall-ats.out b/test/data/dhall-ats.out
new file mode 100644
--- /dev/null
+++ b/test/data/dhall-ats.out
@@ -0,0 +1,42 @@
+#include ".atspkg/contrib/hs-bind-0.3.6/runtime.dats"
+#include "share/atspre_staload.hats"
+
+staload UN = "prelude/SATS/unsafe.sats"
+staload "src/gen.sats"
+
+fun free_option(x : option(int)) : void =
+  case+ x of
+    | ~Some (_) => ()
+    | ~None() => ()
+
+fun print_pair(x : pair(int, int)) : void =
+  let
+    val f = x.first
+    val s = x.second
+  in
+    println!("Pair { first = ", f, ", second = ", s, " }")
+  end
+
+fun print_option_int(x : !option(int)) : void =
+  case+ x of
+    | Some (n) => (print("Some") ; println!(n))
+    | None() => println!("None")
+
+extern
+fun hs_pass() : ptr =
+  "mac#pass_val"
+
+extern
+fun hs_read() : ptr =
+  "mac#read_dhall"
+
+implement main0 (argc, argv) =
+  {
+    val _ = hs_init(argc, argv)
+    var x = $UN.ptr0_get<option(int)>(hs_read())
+    val y = $UN.ptr0_get<pair(int, int)>(hs_pass())
+    val _ = print_pair(y)
+    val _ = print_option_int(x)
+    val _ = free_option(x)
+    val _ = hs_exit()
+  }
