
8 Apr
2011
8 Apr
'11
10:03 a.m.
In an effort to get more type-checked goodness in hamlet, I started using string constants for all my dom IDs and classes. We're not using the newIdent function because I want control over what the IDs and classes will be named. I wrote up a little typeclass as such: class CustomIdentString a where jqVal :: a -> String; idVal :: a -> String newtype CustomIdentCls = MkCls String instance CustomIdentString CustomIdentCls where jqVal (MkCls s) = "." ++ s; idVal (MkCls s) = s; newtype CustomIdentId = MkId String instance CustomIdentString CustomIdentId where jqVal (MkId s) = "#" ++ s; idVal (MkId s) = s; This way, I can refer to divs in javascript using: $("#{jqVal myId}").foo.. And create the elements in hamlet using
...
I'm wondering is there a datatype for IDs and Classes that I can use to make the IDs and Classes directly so that:
and
would fail to typecheck?
In general, are there any good, safe ways to do this instead of just unwrapping to strings?
max