We could have something like

class DomId a where
  toDomId :: a -> Text

class DomClass a where
  toDomClass :: a -> Text

That hamlet calls on id and class insertions. Michael would no better if that is possible with the hamlet internals.


On Fri, Apr 8, 2011 at 7:03 AM, Max Cantor <mxcantor@gmail.com> wrote:
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
<div ##{idVal myId}> ...

I'm wondering is there a datatype for IDs and Classes that I can use to make the IDs and Classes directly so that:
<div .#{foo myId}> and <div ##{foo myCls}>
would fail to typecheck?

In general, are there any good, safe ways to do this instead of just unwrapping to strings?

max
_______________________________________________
web-devel mailing list
web-devel@haskell.org
http://www.haskell.org/mailman/listinfo/web-devel