Skip to content

Commit 01d49fe

Browse files
authored
Add Edge instance for List (#3)
* For `Cons a tail` this adds a node `a` with an edge to `tail` * For `Nil` it adds a node `Nil` to the graph
1 parent 8a31fd7 commit 01d49fe

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/Data/GenericGraph.purs

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module Data.GenericGraph where
22

33
import Control.Semigroupoid ((>>>))
4+
import Data.List(List(..))
45
import Data.Array (concat, foldr, (!!), (:))
56
import Data.DotLang (Edge(..), EdgeType(..), Graph, Node(..), graphFromElements, changeNodeId, nodeId)
67
import Data.DotLang.Attr (FillStyle(..))
@@ -71,6 +72,11 @@ instance arrayEdges :: Edges a => Edges (Array a) where
7172
edges [] = Root (Just $ Node "[]" []) []
7273
edges a = Root (Just $ Node ("array") []) (edges <$> a)
7374

75+
instance listEdges :: Edges a => Edges (List a) where
76+
edges Nil = Root (Just $ Node ("Nil") []) []
77+
edges (Cons a as) = case edges a of
78+
(Root n _) -> Root n [edges as]
79+
7480
instance genericReprArgument :: Edges a => GenericEdges (Argument a) where
7581
genericEdges' (Argument a) = edges a
7682

test/Main.purs

+9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Data.Foldable (foldr)
88
import Data.Generic.Rep (class Generic)
99
import Data.Generic.Rep.Show (genericShow)
1010
import Data.GenericGraph (class Edges, genericEdges, genericToGraph)
11+
import Data.List(List(..)) as L
1112
import Effect (Effect)
1213
import Effect.Aff (Aff)
1314
import Effect.Aff.Class (liftAff)
@@ -91,6 +92,14 @@ main = runTest do
9192
equal
9293
"digraph {root [style=invis]; 0 [label=\"Cons'\"]; 4 [label=\"1\"]; 1 [label=\"Cons'\"]; 3 [label=\"2\"]; 2 [label=\"Nil\"]; root -> 0 []; 0 -> 4 []; 0 -> 1 []; 1 -> 3 []; 1 -> 2 []; }"
9394
(toText $ toGraph $ Cons' 1 (Cons' 2 Nil))
95+
test "prelude.list Cons" do
96+
equal
97+
"digraph {root [style=invis]; 0 [label=\"1\"]; 1 [label=\"2\"]; 2 [label=\"6\"]; 3 [label=\"Nil\"]; root -> 0 []; 0 -> 1 []; 1 -> 2 []; 2 -> 3 []; }"
98+
(toText $ genericToGraph $ L.Cons 1 (L.Cons 2 (L.Cons 6 L.Nil)))
99+
test "prelude.list Nil" do
100+
equal
101+
"digraph {root [style=invis]; 0 [label=\"Nil\"]; root -> 0 []; }"
102+
(toText $ genericToGraph $ (L.Nil :: L.List Int))
94103
test "tree" do
95104
equal
96105
"digraph {root [style=invis]; 0 [label=\"Node'\"]; 9 [label=\"Leaf'\"]; 8 [label=\"3\"]; 1 [label=\"Node'\"]; 4 [label=\"Node'\"]; 7 [label=\"Leaf'\"]; 6 [label=\"5\"]; 5 [label=\"Leaf'\"]; 3 [label=\"4\"]; 2 [label=\"Leaf'\"]; root -> 0 []; 0 -> 9 []; 0 -> 8 []; 0 -> 1 []; 1 -> 4 []; 4 -> 7 []; 4 -> 6 []; 4 -> 5 []; 1 -> 3 []; 1 -> 2 []; }"

0 commit comments

Comments
 (0)