diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for language-c99-simple
 
+## 0.1.1  -- 2019-04-01
+
+* Implemented `transtypename`, used in typecasts.
+* Fixed version bounds on dependencies.
+
 ## 0.1.0.0  -- 2019-03-30
 
 * First version. Initial version supporting features needed for copilot.
diff --git a/language-c99-simple.cabal b/language-c99-simple.cabal
--- a/language-c99-simple.cabal
+++ b/language-c99-simple.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                language-c99-simple
-version:             0.1.0.0
+version:             0.1.1
 synopsis:            C-like AST to simplify writing C99 programs.
 description:
   This package is a wrapper on top of 'language-c99'. It provides a simpler
@@ -33,8 +33,8 @@
   -- other-modules:       
   -- other-extensions:    
   build-depends:       base >=4.9 && <5,
-                       language-c99 == 0.1.*,
-                       language-c99-util == 0.1.*,
+                       language-c99 >= 0.1 && < 0.2,
+                       language-c99-util >= 0.1 && < 0.2,
                        mtl >= 2.2.0 && < 2.3
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Language/C99/Simple/Translate.hs b/src/Language/C99/Simple/Translate.hs
--- a/src/Language/C99/Simple/Translate.hs
+++ b/src/Language/C99/Simple/Translate.hs
@@ -278,39 +278,49 @@
   e1' = wrap $ transexpr e1
   e2' = wrap $ transexpr e2
 
-transtypename = undefined -- TODO
-
+transtypename :: TypeName -> C.TypeName
+transtypename (TypeName ty) = C.TypeName specquals adeclr where
+  specquals = getspecquals ty
+  adeclr    = execState (getabstractdeclr ty) Nothing
 
-getabstractdeclr :: Type -> State C.AbstractDeclr ()
+getabstractdeclr :: Type -> State (Maybe C.AbstractDeclr) ()
 getabstractdeclr ty = case ty of
-  Type ty'    -> do
+  Type ty' -> do
     getabstractdeclr ty'
     adeclr <- get
-    put $ C.AbstractDeclrDirect Nothing (C.DirectAbstractDeclr adeclr)
+    case adeclr of
+      Nothing      -> return ()
+      Just adeclr' -> put $ Just $ C.AbstractDeclrDirect Nothing dadeclr where
+        dadeclr = C.DirectAbstractDeclr adeclr'
 
   TypeSpec ts -> return ()
 
   Ptr ty' -> do
     let (quals, ty'') = gettypequals ty'
-    getabstractdeclr ty''
+        ptr           = C.PtrBase quals
     adeclr <- get
-    let ptr = C.PtrBase quals
-    put $ C.AbstractDeclrDirect (Just ptr) (C.DirectAbstractDeclr adeclr)
+    case adeclr of
+      Nothing      -> put $ Just $ C.AbstractDeclr ptr
+      Just adeclr' -> put $ Just $ C.AbstractDeclrDirect (Just ptr) dadeclr where
+        dadeclr = C.DirectAbstractDeclr adeclr'
+    getabstractdeclr ty''
 
   Array ty' len -> do
+    let lenexpr       = (wrap.transexpr) <$> len
+        emptyarrdeclr = C.DirectAbstractDeclrArray1 Nothing Nothing lenexpr
+    adeclr <- get
+    let declr = case adeclr of
+          Nothing -> C.AbstractDeclrDirect Nothing emptyarrdeclr
+          Just adeclr -> case adeclr of
+            C.AbstractDeclrDirect mptr adeclr' -> C.AbstractDeclrDirect mptr arrdeclr where
+              arrdeclr = C.DirectAbstractDeclrArray1 (Just adeclr') Nothing lenexpr
+            C.AbstractDeclr ptr -> C.AbstractDeclrDirect (Just ptr) emptyarrdeclr
+    put $ Just declr
     getabstractdeclr ty'
-    declr <- get
-    case declr of
-      C.AbstractDeclrDirect ptr adeclr -> do
-        let len'     = (wrap.transexpr) <$> len
-            arrdeclr = C.DirectAbstractDeclrArray1 (Just adeclr) Nothing len'
-        put $ C.AbstractDeclrDirect ptr arrdeclr
-      _ -> error "This should never happen, contact maintainer if it does."
 
   Const    ty' -> getabstractdeclr ty'
   Restrict ty' -> getabstractdeclr ty'
   Volatile ty' -> getabstractdeclr ty'
-
 
 transstmt :: Stmt -> C.Stmt
 transstmt stmt = case stmt of
