-- Die Knoten des Hauses: data Node = A | B | C | D | E deriving (Eq,Show) -- Die zu zeichnenden Kanten: data Edge = Edge Node Node deriving (Eq,Show) allEdges = [Edge A B, Edge A C, Edge B C, Edge B D, Edge B E, Edge C D, Edge C E, Edge D E] draw :: [Edge] -> [Node] -> Bool draw [] [_] = True draw edges (n1:n2:nodes) | chooseEdge n1 n2 edges == restedges = draw restedges (n2 : nodes) where restedges free chooseEdge :: Node -> Node -> [Edge] -> [Edge] chooseEdge n1 n2 (Edge n1 n2 : edges) = edges chooseEdge n2 n1 (Edge n1 n2 : edges) = edges chooseEdge n1 n2 (edge : edges) = edge : chooseEdge n1 n2 edges -- Draw all edges in order to connect nodes: -- > draw allEdges nodes where nodes free