I think I understand that, but without actually writing it out, it's going to be impossible to test.
The types I was talking about go as:
type Context a b = (Adj b, Node, a, Adj b)
type Adj b = [(b, Node)]
It definitely allows traversal, and adding nodes seems to be possible, too (judging from the api, of course, it ought to be :)