diff --git a/language-dot.cabal b/language-dot.cabal
--- a/language-dot.cabal
+++ b/language-dot.cabal
@@ -1,5 +1,5 @@
 name:         language-dot
-version:      0.0.9
+version:      0.1.0
 category:     Language
 synopsis:     A library for the analysis and creation of Graphviz DOT files
 description:  A library for the analysis and creation of Graphviz DOT files.
diff --git a/src/Language/Dot/Syntax.hs b/src/Language/Dot/Syntax.hs
--- a/src/Language/Dot/Syntax.hs
+++ b/src/Language/Dot/Syntax.hs
@@ -4,17 +4,17 @@
 
 data Graph
   = Graph GraphStrictness GraphDirectedness (Maybe Id) [Statement]
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data GraphStrictness
   = StrictGraph
   | UnstrictGraph
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show, Enum, Bounded)
 
 data GraphDirectedness
   = DirectedGraph
   | UndirectedGraph
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show, Enum, Bounded)
 
 data Id
   = NameId    String
@@ -22,7 +22,7 @@
   | IntegerId Integer
   | FloatId   Float
   | XmlId     Xml
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data Statement
   = NodeStatement       NodeId [Attribute]
@@ -30,63 +30,63 @@
   | AttributeStatement  AttributeStatementType [Attribute]
   | AssignmentStatement Id Id
   | SubgraphStatement   Subgraph
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data AttributeStatementType
   = GraphAttributeStatement
   | NodeAttributeStatement
   | EdgeAttributeStatement
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show, Enum, Bounded)
 
 data Attribute
   = AttributeSetTrue  Id
   | AttributeSetValue Id Id
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data NodeId
   = NodeId Id (Maybe Port)
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data Port
   = PortI Id (Maybe Compass)
   | PortC Compass
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data Compass
   = CompassN  | CompassE  | CompassS  | CompassW
   | CompassNE | CompassNW | CompassSE | CompassSW
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data Subgraph
   = NewSubgraph (Maybe Id) [Statement]
   | SubgraphRef Id
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data Entity
   = ENodeId   EdgeType NodeId
   | ESubgraph EdgeType Subgraph
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data EdgeType
   = NoEdge
   | DirectedEdge
   | UndirectedEdge
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show, Enum, Bounded)
 
 data Xml
   = XmlEmptyTag XmlName [XmlAttribute]
   | XmlTag      XmlName [XmlAttribute] [Xml]
   | XmlText     String
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data XmlName
   = XmlName String
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data XmlAttribute
   = XmlAttribute XmlName XmlAttributeValue
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 data XmlAttributeValue
   = XmlAttributeValue String
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
