<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2018-04-03 9:50 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=""><br><br><div class="gmail_quote"><div dir="ltr">On Tue, 3 Apr. 2018, 5:31 pm Olivier S., <<a href="mailto:olivier.sohn@gmail.com" target="_blank">olivier.sohn@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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></blockquote></div><div><br></div><div><br></div></span><div>No, `node ~ MyNode` in my example. Whilst the key may be the unique identifier, the node type itself may be richer (and contain the key!).</div></blockquote><div><br></div><div>Just wanted to point out that if the node contains some data which is neither key not list of neighbours, then `Map key [key]` won't be enough.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><div><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><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>On 3 April 2018 at 10:11, Olivier S. <<a href="mailto:olivier.sohn@gmail.com" target="_blank">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" target="_blank">ivan.miljenovic@gmail.com</a>>:<br>
>><br>
>> On 3 April 2018 at 09:24, Olivier S. <<a href="mailto:olivier.sohn@gmail.com" target="_blank">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="m_845197938452894708m_-5436481545529535708HOEnZb"><div class="m_845197938452894708m_-5436481545529535708h5"><br>
--<br>
Ivan Lazar Miljenovic<br>
<a href="mailto:Ivan.Miljenovic@gmail.com" target="_blank">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>
</blockquote></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div dir="ltr" class="m_845197938452894708gmail_signature" data-smartmail="gmail_signature"><p dir="ltr">Ivan Miljenovic<br>
On mobile; please excuse any tpyos</p>
</div>
</font></span></blockquote></div><br></div></div>