+type instance IsExpr Constant = True
+type instance IsCommonExpr Constant = True
+type instance MentionedVars Constant = HNil
+
+{- This is what we want to do but GHC can't handle this for now.
+class ( (HLengthOf str :<=: D255) ~ True
+ , HString str
+ )
+ => IsVarName str
+-}
+type family IsVarName str
+type instance IsVarName str = ( (HLength str :<=: D255)
+ :&&:
+ (HAll IsGoodLetterForVarNameA str)
+ )
+
+type family IsGoodLetterForVarName c
+type instance IsGoodLetterForVarName c = ( ((c :>=: D65) :&&: (c :<=: D90)) -- A-Z
+ :||:
+ ((c :>=: D99) :&&: (c :<=: D122)) -- a-z
+ :||:
+ (c :==: D45) -- '-'
+ :||:
+ (c :==: D95) -- '_'
+ )
+
+data IsGoodLetterForVarNameA
+instance ApplyT IsGoodLetterForVarNameA c where
+ type Apply IsGoodLetterForVarNameA c = IsGoodLetterForVarName c
+
+-- Variable