+class ( IsShortEnoughForVarName str
+ , HString str
+ )
+ => IsVarName str
+
+class HString str => IsShortEnoughForVarName str
+instance ( HString str
+ , (HLength str :<=: D255) ~ True
+ )
+ => IsShortEnoughForVarName str
+
+class IntegerT c => GoodLetterForVarName c where
+ type IsGoodLetterForVarName c
+
+instance IntegerT c => GoodLetterForVarName c where
+ type IsGoodLetterForVarName c = ( (c :>=: D65) :&&: (c :<=: D90) ) -- A-Z
+ :||:
+ ( (c :>=: D99) :&&: (c :<=: D122) ) -- a-z
+ :||:
+ ( c :==: D45 ) -- '-'
+ :||:
+ ( c :==: D95 ) -- '_'
+
+--instance (a :>=: D65) ~ True => IsGoodLetterForVarName a