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.3.0.4
+version:             0.3.0.5
 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.hs b/src/Language/ATS.hs
--- a/src/Language/ATS.hs
+++ b/src/Language/ATS.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE OverloadedStrings #-}
+
 -- | Main module for the library
 module Language.ATS ( -- * Functions for working with syntax
                       lexATS
@@ -65,7 +67,7 @@
 rewriteATS' (ATS ds) = ATS (rewriteDecl <$> ds)
 
 printErr :: MonadIO m => ATSError String -> m ()
-printErr = liftIO . hPutDoc stderr . pretty
+printErr = liftIO . hPutDoc stderr . (<> "\n") . pretty
 
 -- | Parse a string containing ATS source.
 parse :: String -> Either (ATSError String) ATS
diff --git a/src/Language/ATS/Lexer.x b/src/Language/ATS/Lexer.x
--- a/src/Language/ATS/Lexer.x
+++ b/src/Language/ATS/Lexer.x
@@ -39,8 +39,8 @@
 $alpha = [a-zA-Z]
 $terminal = $printable # $white
 $esc_char = \27
-@escape_ch = \\ ([nt\'\\] | $octal+)
-@escape_str = \\ ([nt\"\\] | $octal+)
+@escape_ch = \\ ([nrt\'\\] | $octal+)
+@escape_str = \\ ([nrt\"\\] | $octal+)
 @char = ($terminal # [\\\']) | " " | @escape_ch | $esc_char
 @char_lit = \' @char \'
 
@@ -98,7 +98,7 @@
 
 @fixity_decl = "infixr" | "infixl" | "prefix" | "postfix"
 
-@builtin = \$ (("effmask_" (wrt | all | ref)) | "extfcall" | "ldelay" | "delay" | "list_vt" | "tempenver" | "extype" | "mylocation" | "showtype")
+@builtin = \$ (("effmask_" (wrt | all | ref)) | "extfcall" | "ldelay" | "delay" | "list_vt" | "tempenver" | "extval" | "extype" | "mylocation" | "showtype")
 
 @block_comment_start = \(\* | \/\*
 @block_comment_end = \*\) | \*\/
@@ -195,6 +195,7 @@
     <0> overload                 { tok (\p s -> alex $ Keyword p KwOverload) }
     <0> with                     { tok (\p s -> alex $ Keyword p KwWith) }
     <0> extern                   { tok (\p s -> alex $ Keyword p KwExtern) }
+    <0> extvar                   { tok (\p s -> alex $ Keyword p KwExtVar) }
     <0> sortdef                  { tok (\p s -> alex $ Keyword p KwSortdef) }
     <0> propdef                  { tok (\p s -> alex $ Keyword p KwPropdef) }
     <0> tkindef                  { tok (\p s -> alex $ Keyword p KwTKind) }
@@ -317,6 +318,7 @@
              | KwAbsvtype
              | KwProofImplement
              | KwSortdef
+             | KwExtVar
              | KwPropdef
              | KwRaise
              | KwTKind
@@ -432,6 +434,7 @@
     pretty KwProofImplement = "primplmnt"
     pretty KwSortdef = "sortdef"
     pretty KwPropdef = "propdef"
+    pretty KwExtVar = "extvar"
     pretty KwTKind = "tkind"
     pretty KwMod = "mod"
     pretty KwFixAt = "fix@"
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
@@ -82,6 +82,7 @@
     with { Keyword $$ KwWith }
     dataprop { Keyword $$ KwDataprop }
     praxi { Keyword $$ KwPraxi }
+    extvar { Keyword $$ KwExtVar }
     extern { Keyword $$ KwExtern }
     t0pPlain { Keyword $$ (KwT0p None) }
     t0pCo { Keyword $$ (KwT0p Plus) }
@@ -209,6 +210,7 @@
      | Name doubleParens { Dependent $1 [] }
      | identifierSpace openParen TypeInExpr closeParen { Dependent (Unqualified $ to_string $1) $3 }
      | identifierSpace { Named (Unqualified $ to_string $1) }
+     | specialIdentifier string { Dependent (SpecialName (token_posn $1) (to_string $1)) [Named (Unqualified $ $2)] }
      | Name { Named $1 }
      | exclamation Type { Unconsumed $2 }
      | Type mutateArrow Type { FunctionType "->" $1 $3 }
@@ -744,6 +746,7 @@
 -- | Parse a declaration
 Declaration : include string { Include $2 }
             | define { Define $1 }
+            | extvar string eq Expression { ExtVar $1 $2 $4 }
             | define identifierSpace string { Define ($1 ++ " " ++ to_string $2 ++ $3) } -- FIXME better approach?
             | define identifier string { Define ($1 ++ " " ++ to_string $2 ++ $3) } -- FIXME better approach?
             | define identifierSpace intLit { Define ($1 ++ " " ++ to_string $2 ++ " " ++ show $3) }
diff --git a/src/Language/ATS/PrettyPrint.hs b/src/Language/ATS/PrettyPrint.hs
--- a/src/Language/ATS/PrettyPrint.hs
+++ b/src/Language/ATS/PrettyPrint.hs
@@ -282,29 +282,30 @@
 
 instance Pretty Type where
     pretty = cata a where
-        a (NamedF n)              = pretty n
-        a (ViewTypeF _ t)         = "view@" <> parens t
-        a (ExF e (Just t))        = pretty e <+> t
-        a (ExF e Nothing)         = pretty e
-        a (DependentF n ts)       = pretty n <> parens (mconcat (punctuate ", " (fmap pretty (reverse ts))))
-        a (ForAF u t)             = pretty u <+> t
-        a (UnconsumedF t)         = "!" <> t
-        a (AsProofF t (Just t'))  = t <+> ">>" <+> t'
-        a (AsProofF t Nothing)    = t <+> ">> _"
-        a (FromVTF t)             = t <> "?!"
-        a (MaybeValF t)           = t <> "?"
-        a (AtExprF _ t t')        = t <+> "@" <+> pretty t'
-        a (AtTypeF _ t)           = "@" <> t
-        a (ProofTypeF _ t t')     = parens (prettyArgsG "" "" t <+> "|" <+> t')
-        a (ConcreteTypeF e)       = pretty e
-        a (TupleF _ ts)           = parens (mconcat (punctuate ", " (fmap pretty (reverse ts))))
-        a (RefTypeF t)            = "&" <> t
-        a (FunctionTypeF s t t')  = t <+> string s <+> t'
-        a (ViewLiteralF c)        = "view" <> pretty c
-        a NoneTypeF{}             = "()"
-        a ImplicitTypeF{}         = ".."
-        a (AnonymousRecordF _ rs) = prettyRecord rs
-        a (ParenTypeF _ t)        = parens t
+        a (NamedF n)                       = pretty n
+        a (ViewTypeF _ t)                  = "view@" <> parens t
+        a (ExF e (Just t))                 = pretty e <+> t
+        a (ExF e Nothing)                  = pretty e
+        a (DependentF n@SpecialName{} [t]) = pretty n <+> pretty t
+        a (DependentF n ts)                = pretty n <> parens (mconcat (punctuate ", " (fmap pretty (reverse ts))))
+        a (ForAF u t)                      = pretty u <+> t
+        a (UnconsumedF t)                  = "!" <> t
+        a (AsProofF t (Just t'))           = t <+> ">>" <+> t'
+        a (AsProofF t Nothing)             = t <+> ">> _"
+        a (FromVTF t)                      = t <> "?!"
+        a (MaybeValF t)                    = t <> "?"
+        a (AtExprF _ t t')                 = t <+> "@" <+> pretty t'
+        a (AtTypeF _ t)                    = "@" <> t
+        a (ProofTypeF _ t t')              = parens (prettyArgsG "" "" t <+> "|" <+> t')
+        a (ConcreteTypeF e)                = pretty e
+        a (TupleF _ ts)                    = parens (mconcat (punctuate ", " (fmap pretty (reverse ts))))
+        a (RefTypeF t)                     = "&" <> t
+        a (FunctionTypeF s t t')           = t <+> string s <+> t'
+        a (ViewLiteralF c)                 = "view" <> pretty c
+        a NoneTypeF{}                      = "()"
+        a ImplicitTypeF{}                  = ".."
+        a (AnonymousRecordF _ rs)          = prettyRecord rs
+        a (ParenTypeF _ t)                 = parens t
 
 gan :: Maybe Sort -> Doc
 gan (Just t) = " : " <> pretty t <> " "
@@ -544,7 +545,8 @@
     pretty (AndDecl t p e)                 = "and" <+> pretty p <> valSig t <+> "=" <+> pretty e
     pretty (Val a t p e)                   = "val" <> pretty a <+> pretty p <> valSig t <+> "=" <+> pretty e
     pretty (Var t p Nothing (Just e))      = "var" <+> pretty p <> valSig t <+> "with" <+> pretty e
-    pretty (Var t p e Nothing)             = "var" <+> pretty p <> valSig t <+> "=" <+> pretty e
+    pretty (Var t p (Just e) Nothing)      = "var" <+> pretty p <> valSig t <+> "=" <+> pretty e
+    pretty (Var t p Nothing Nothing)       = "var" <+> pretty p <> valSig t
     pretty (Var _ _ _ Just{})              = undefined
     pretty (Include s)                     = "#include" <+> pretty s
     pretty (Staload b Nothing s)           = bool "" "#" b <> "staload" <+> pretty s
@@ -585,10 +587,12 @@
     pretty (AndD d (Stadef i as t))        = pretty d <+> "and" <+> text i <+> prettySortArgs as <> pretty t
     pretty (AbsView _ i as t)              = "absview" <+> text i <> prettySortArgs as <> prettyMaybeType t
     pretty (AbsVT0p _ i as t)              = "absvt@ype" <+> text i <> prettySortArgs as <> prettyMaybeType t
+    pretty (AbsT0p _ i Nothing t)          = "abst@ype" <+> text i <+> "=" <+> pretty t
     pretty (AbsT0p _ i as t)               = "abst@ype" <+> text i <> prettySortArgs as <> "=" <+> pretty t
     pretty (ViewDef _ s as t)              = "viewdef" <+> text s <> prettySortArgs as <+> "=" <#> pretty t
     pretty (TKind _ n s)                   = pretty n <+> "=" <+> text s
     pretty (SortDef _ s t)                 = "sortdef" <+> text s <+> "=" <+> either pretty pretty t
     pretty (AndD d (SortDef _ i t))        = pretty d <+> "and" <+> text i <+> "=" <+> either pretty pretty t
     pretty (MacDecl _ n is e)              = "macdef" <+> text n <> "(" <> mconcat (punctuate ", " (fmap text is)) <> ") =" <+> pretty e
+    pretty (ExtVar _ s e)                  = "extvar" <+> text s <+> "=" <+> pretty e
     pretty AndD{}                          = undefined -- probably not valid syntax if we get to this point
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
@@ -131,6 +131,7 @@
                  | MacDecl AlexPosn String [String] Expression
                  | DataSort AlexPosn String [DataSortLeaf]
                  | Exception String Type
+                 | ExtVar AlexPosn String Expression
                  deriving (Show, Eq, Generic, NFData)
 
 data DataSortLeaf = DataSortLeaf [Universal] Sort (Maybe Sort)
diff --git a/test/data/integer_ptr.out b/test/data/integer_ptr.out
new file mode 100644
--- /dev/null
+++ b/test/data/integer_ptr.out
