+-- Empty
+type Empty = Graph Nil
+
+-- IsEmpty
+type family IsEmpty g
+type instance IsEmpty (Graph Nil) = True
+type instance IsEmpty (Graph (Cons x xs)) = False
+
+-- Match
+--type Match n g
+-- =
+
+{-
+-- NodeSet
+class NodeSet ns
+instance NodeSet Nil
+instance NodeSet ns => NodeSet (Cons n ns)
+
+-- NodeIDSet
+class NoDuplicates ids => NodeIDSet ids
+instance NodeIDSet Nil
+instance (OccursNot id ids, NodeIDSet ids) => NodeIDSet (Cons id ids)
+
+-- LPath (list of labeled node IDs)
+class LPath p
+instance LPath Nil
+instance LPath p => LPath (Cons (Cons l id) p)
+
+-- Node
+class NodeIDSet (LinksFrom n) => Node n