[web-devel] [Hamlet] CSS size wrapper
Michael Snoyman
michael at snoyman.com
Wed Feb 16 05:25:54 CET 2011
It looks good. Instead of the mkSize TH function, if you just define
an IsString instance, then anyone using OverloadedStrings will be able
to use string literals. I haven't confirmed this yet, but it might
even be possible to embed those string literals inside Cassius and GHC
will still apply fromString appropriately.
As far as variables inside templates: I personally think that's
crossing the line again into stuff templates shouldn't be dealing
with, but I'm open for discussions. Since templates tie in so well
with Haskell, I just don't think it's worth adding a whole bunch of
extra code and syntax to make it work.
Michael
On Tue, Feb 15, 2011 at 10:55 PM, Dmitry Kurochkin
<dmitry.kurochkin at gmail.com> wrote:
> 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?
>
> Regards,
> Dmitry
>
More information about the web-devel
mailing list