render = (graph) => {
each(graph.children, prepareNode);
return Elk.layout(graph).then(_ => {
const layers = {};
const addToLayer = (v,k)=> {layers[k] = append(layers[k]||[], v)};
each(graph.children, _ => each(renderNode(_), addToLayer));
each(graph.edges, _ => each(renderEdge(_), addToLayer));
const svg_layers = reduce(layers, (r,v,k)=>{r.push(map(v, _ => S.g({"class":k}, v)))}, []);
return S.svg({width:_.width,height:_.height}, svg_layers);
});
}