Making Elm unsafe
Say we have a nifty
addTwo function in JSland we’d like to call. The function simply takes an argument and adds two to it.
It’d be nice if we could do something simple like this:
We’d basically be saying to the compiler “hey, trust me for a while, I got this” and it would gladly accept your request.
While this would be great, it would also be extremely unsafe, so Elm doesn’t allow this and makes you use ports, a safer way of doing FFI, basically doing message passing from Elm to JS and viceversa. So you should do that instead!
I wouldn’t have teased you before if you couldn’t do that above.
We can just define a funny
And we can call it as above. This will of course compile, and if we run our app as that, it will enter an infinite loop (
jsCall call itself indefinitely).
The only remaining thing remaining thing to do is to go to the compiled file (works both, with and without
--optimize), look for the compiled
jsCall function, which will probably look something like:
And we just replace its content with
And that’s it! You can now define a
window.addTwo = a => a + 2 function that will be called from Elm.
Disclaimer: I don’t advocate doing or not doing this, I found it curious, and perhaps useful sometimes, but given that you’re pretty much losing safety while doing this and using a hack that may be removed anytime soon, think twice before diving into something like this.