<div dir="ltr"><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">I think in your example, nodes are `()` by the current meaning of node in <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">graphFromEdges</span>.</span></div><div><br></div><div>To be closer to what <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">graphFromEdges does today, we should change it to:</span></div><div><br></div><div>`data MyNode key nodeData = MyNode nodeData key [key]`</div><div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-04-03 2:54 GMT+02:00 Ivan Lazar Miljenovic <span dir="ltr"><<a href="mailto:ivan.miljenovic@gmail.com" target="_blank">ivan.miljenovic@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 3 April 2018 at 10:11, Olivier S. <<a href="mailto:olivier.sohn@gmail.com">olivier.sohn@gmail.com</a>> wrote:<br>
><br>
><br>
> 2018-04-03 1:51 GMT+02:00 Ivan Lazar Miljenovic <<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>>:<br>
>><br>
>> On 3 April 2018 at 09:24, Olivier S. <<a href="mailto:olivier.sohn@gmail.com">olivier.sohn@gmail.com</a>> wrote:<br>
>> > So it seems using Data.IntMap would be a good compromise?<br>
>><br>
>> IntMap only works if `node ~ Int`; otherwise we lose generality.<br>
><br>
><br>
> I was under the impression that we can replace [(node, key, [key])], by<br>
> IntMap (node, [Int]), node being anything we want. Is it not true?<br>
<br>
</span>I've never used Data.Graph in anger, but my understanding is that in<br>
the most polymorphic sense you may consider the equivalent of `Map<br>
node [key]` along with a `node -> key` function.  For example:  `data<br>
MyNode key = MyNode { nodeID :: key, edges :: [key]}`; then you could<br>
have `graphFromEdges . map (\mn -> (mn, nodeID mn, edges mn))`.<br>
<br>
At this point in time the actual type of `node` is no longer useful,<br>
so having `graphFromEdges` consume a `Map key [key]` may suffice...<br>
but then you can't get back the original node type to map back to your<br>
original values.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Ivan Lazar Miljenovic<br>
<a href="mailto:Ivan.Miljenovic@gmail.com">Ivan.Miljenovic@gmail.com</a><br>
<a href="http://IvanMiljenovic.wordpress.com" rel="noreferrer" target="_blank">http://IvanMiljenovic.<wbr>wordpress.com</a><br>
</div></div></blockquote></div><br></div>