diff --git a/hsx.cabal b/hsx.cabal
--- a/hsx.cabal
+++ b/hsx.cabal
@@ -1,5 +1,5 @@
 Name:                   hsx
-Version:                0.10.2
+Version:                0.10.3
 License:                BSD3
 License-File:           LICENSE
 Author:                 Niklas Broberg, Joel Bjornson
diff --git a/src/HSX/Transform.hs b/src/HSX/Transform.hs
--- a/src/HSX/Transform.hs
+++ b/src/HSX/Transform.hs
@@ -407,8 +407,10 @@
 
 mkAttr :: XAttr -> Exp
 mkAttr (XAttr name e) =
-    paren (metaMkName name `metaAssign` e)
-
+    paren (metaMkName name `metaAssign` (stringTypeSig e))
+    where
+      stringTypeSig e@(Lit (String _)) = ExpTypeSig noLoc e (TyCon (UnQual (Ident "String")))
+      stringTypeSig e                  = e
 
 -- | Transform pattern bind declarations inside a @let@-expression by transforming
 -- subterms that could appear as regular patterns, as well as transforming the bound
@@ -1912,6 +1914,7 @@
 
 -- | Create an attribute by applying the overloaded @asAttr@
 metaAsAttr :: Exp -> Exp
+metaAsAttr e@(Lit (String _)) = metaFunction "asAttr" [ExpTypeSig noLoc e (TyCon (UnQual (Ident "String")))]
 metaAsAttr e = metaFunction "asAttr" [e]
 
 argAsAttr :: Exp
@@ -1920,7 +1923,7 @@
 -- | Create a property from an attribute and a value.
 metaAssign :: Exp -> Exp -> Exp
 metaAssign e1 e2 = infixApp e1 assignOp e2
-  where assignOp = QVarOp $ UnQual $ Symbol ":="
+  where assignOp = QConOp $ UnQual $ Symbol ":="
 
 -- | Make xml out of some expression by applying the overloaded function
 -- @asChild@.
@@ -1951,5 +1954,8 @@
 
 metaMkName :: XName -> Exp
 metaMkName n = case n of
-    XName s      -> strE s
-    XDomName d s -> tuple [strE d, strE s]
+    XName s      -> stringTypeSig (strE s)
+    XDomName d s -> tuple [stringTypeSig $ strE d, stringTypeSig $ strE s]
+    where
+      stringTypeSig e = ExpTypeSig noLoc e (TyCon (UnQual (Ident "String")))
+
