[web-devel] [Hamlet] CSS size wrapper

Dmitry Kurochkin dmitry.kurochkin at gmail.com
Tue Feb 15 21:55:59 CET 2011

Hi Yesod developers.

Attached are two modules to implement CSS size wrappers for Hamlet. It
implements several types for different CSS units:

  * em - EmSize
  * ex - ExSize
  * px - PixelSize
  * % - PercentageSize
  * cm, in, mm, pc, pt - AbsoluteSize

You can create them using an mkSize Template Haskell function, e.g.

  let size = $(mkSize "100%")

All types are instances of Show, Eq, Ord, Num, Fractional and ToCss.
This allows you to do math and interpolate it to Hamlet.

Ideally, I wanted to have only one type and make an implicit conversion
from string literals. But I do not know how to forbid mixing of
incompatible units in math (e.g. 10px + 10cm) with a single type. And I
do not know how to make implicit conversion from string literals with
multiple types.

I would appreciate any comments. Including on naming style, type design,
API and overall usefulness. Keep in mind that this is the first time I
use Template Haskell, so the code may be not optimal and plain ugly
(e.g. can we use quasi quotes instead of directly messing with TH?)

BTW Michael, one more thing I miss in Hamlet is defining variables in
templates. I would prefer to put simple CSS-related constants directly
in Cassius instead of a dedicated module. Is it possible to implement?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: MkSizeType.hs
Type: text/x-haskell
Size: 2745 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/web-devel/attachments/20110215/cee1c4f4/attachment.hs>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Size.hs
Type: text/x-haskell
Size: 4247 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/web-devel/attachments/20110215/cee1c4f4/attachment-0001.hs>

More information about the web-devel mailing list