In Elm's SVG modules, all attributes seem to expect String type parameters, which probably makes sense from a DOM point of view. Semantically, however, many attributes are numbers, especially coordinates, radii, widths, etc, which I happen to use a lot when generating graphics algorithmically.
My understanding is that Elm does not have implicits like Scala, and that implicit conversions are frowned upon, probably for good reason.
On the other hand, I'm not willing to clutter my graphics generation code with x <| toString <| myX; too much visual noise.
What I do so far is define a module with functions like
x_ = x << toString
y_ = y << toString
which allows me to use x_ myX in the code.
Is there a more elegant solution I am not aware of?
How are others dealing with this?
The attributes are String because the specifications allow for different units (px, cm, etc.)
The best approach would be to craft a series of unit helpers that help you output the right thing. px, cm, deg, etc.
You could have a helper that's just an alias for toString. I have used just as in x (just myX) in some CSS code I've wrote (for some reason that's how I wanted to read the code) and I've seen s as in x (s myX) (short but can be confusing).
Maybe the best is to use something like int as in x (int myX) or float as in x (float myX)
Another option that might be more elegant than x_ is to import Svg.Attributes as SA and write x = SA.x << toString. You can also move these definitions in a module and import that instead of Svg.Attributes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With