haskell adjacency list add/delete edge implementation