I'm writing a graph class that generalizes the traditional mathematical graph: Nodes can be statements or relationships, and relationships ("edges") can involve any number of nodes, including other relationships. [1] describes the motivation in a little more detail.

[2] explains the idea behind the major types -- Graph, Node, Stmt, and Rel.

Of the .hs files in the project, at this time I believe only the primary one, Dwt.hs [3], deserves your attention.  It is only about 100 lines of code.

I am interested in any kind of feedback at all, no matter how minute in detail or expansive in scope.

[4] lists what I already think might be likely problems and solutions. In particular I wonder whether I should interpret these two patterns:
  "case ni of Rel -> .. Stmt -> .."
and 
  "if (Maybe.isJust nMb) ... else error ..."
as signs that I'm not completely solving the problem. 

I suspect it might be helpful to make the graph operations Maybe or Either, and use <|> on them -- but while I can monkey those words, I don't really know what I'm saying.

[1] https://github.com/JeffreyBenjaminBrown/digraphs-with-text/blob/master/english/motivation.txt
[2] https://github.com/JeffreyBenjaminBrown/digraphs-with-text/blob/master/english/how_it_works.txt
[3] https://github.com/JeffreyBenjaminBrown/digraphs-with-text/blob/master/src/Dwt.hs
[4] https://github.com/JeffreyBenjaminBrown/digraphs-with-text/blob/master/english/todo%2Cmaybe.txt

Thank you,
Jeff