The tying-the-knot strategy can be used to construct graphs such as, using a simple two-edged graph as an example:
data Node = Node Node Node
-- a - b
-- | |
-- c - d
square = a where
a = Node b c
b = Node a d
c = Node a d
d = Node b c
That strategy is rather elegant, but I couldn't find a way to actually use it without Int labels. For example, how could I write a function that counts the amount of nodes on the square
value?
countNodes :: Node -> Int
countNodes = ... ??? ...
main = print $ countNodes square
-- output: 4
a = Node (b,0) (c,0)
, representing thata
is on the first slot of bothb
andc
? – Waggle