You can find a full explanation of the ideas behind this here.
Or, try it on RunKit!
This is a version of JSX for general purpose programming. Why would you want that? Well, it gives us the ability to have curried named parameters in JavaScript.
If you are using Babel, then all you should need to do is the following:
/* @jsx curry(_=>eval(_)) */
var { curry } = require("generic-jsx");
Now you'll be able make functions with named parameters that you can curry:
var fs = require("fs");
var readFileSync = ({ name, encoding }) => fs.readFileSync(name, encoding);
// ...
var readString = <readFileSync encode = "utf8"/>;
<readString name = "package.json"/>();
Or, use with data structures!
/* @jsx (curry(_=>eval(_))) */
var { curry, from } = require("generic-jsx");
var BinaryTree = require("generic-jsx/binary-tree");
// This represents 5 / ( 4 + 6)
<BinaryTree value = "/">
<BinaryTree value = { 5 } />
<BinaryTree value = "+">
<BinaryTree value = { 4 } />
<BinaryTree value = { 6 } />
</BinaryTree>
</BinaryTree>()