I have succeeded in the goal, but It probably can be done better.


After a study of the type constructor "tag" uses, specially in "formtag", "select" and "option", I have a better understanding of it.

Although it is well explained in the manual (XML section), it is not easy to understand when there are several abstract concepts, that your mind easily skips.

Specially the type constructor "tag" it is confound with the value "tag" (that builds up xml subtrees with specific tag) but the different parameters they take augments the confusion.



con svgTag = fn (attrs :: {Type}) =>
         ctx ::: {Unit} ->
         [[Svg] ~ ctx] =>
         unit -> tag attrs ([Svg] ++ ctx) ([Svg] ++ ctx) [] []


I know now that this is well constructed (specially the outer context requirement, and the required context for the inner tags) specially when used with container tags like "g" for grouping elements

val g : svgTag (commonAttrs ++ langSpaceAttrs)

so the required inner context match the inner tags outer context requirement.

>
> val svg : unit -> tag svgTagAttrs body svg [] []
>
> There is a quirk, since SVG can be an html level tag but also an
> inner svg fragment container, but I have not treated this case.

The "svg" tag establishes a new coordinate system. The fragments can be
set up with the grouping tag "g", without redefining the coordinate system.

I could not find a way to encode two possible outer context requirements for the svg tag.




_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to