From 98329e0a3dd4f78b5d815ac3896272ec70904901 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Thu, 11 Dec 2025 10:28:11 +0100 Subject: Add remaining haskell book exercises --- .../24/language-dot/src/Language/Dot/Syntax.hs | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Haskell-book/24/language-dot/src/Language/Dot/Syntax.hs (limited to 'Haskell-book/24/language-dot/src/Language/Dot/Syntax.hs') diff --git a/Haskell-book/24/language-dot/src/Language/Dot/Syntax.hs b/Haskell-book/24/language-dot/src/Language/Dot/Syntax.hs new file mode 100644 index 0000000..cca7d99 --- /dev/null +++ b/Haskell-book/24/language-dot/src/Language/Dot/Syntax.hs @@ -0,0 +1,92 @@ +-- | DOT AST. See . + +module Language.Dot.Syntax where + +data Graph + = Graph GraphStrictness GraphDirectedness (Maybe Id) [Statement] + deriving (Eq, Show) + +data GraphStrictness + = StrictGraph + | UnstrictGraph + deriving (Eq, Show) + +data GraphDirectedness + = DirectedGraph + | UndirectedGraph + deriving (Eq, Show) + +data Id + = NameId String + | StringId String + | IntegerId Integer + | FloatId Float + | XmlId Xml + deriving (Eq, Show) + +data Statement + = NodeStatement NodeId [Attribute] + | EdgeStatement [Entity] [Attribute] + | AttributeStatement AttributeStatementType [Attribute] + | AssignmentStatement Id Id + | SubgraphStatement Subgraph + deriving (Eq, Show) + +data AttributeStatementType + = GraphAttributeStatement + | NodeAttributeStatement + | EdgeAttributeStatement + deriving (Eq, Show) + +data Attribute + = AttributeSetTrue Id + | AttributeSetValue Id Id + deriving (Eq, Show) + +data NodeId + = NodeId Id (Maybe Port) + deriving (Eq, Show) + +data Port + = PortI Id (Maybe Compass) + | PortC Compass + deriving (Eq, Show) + +data Compass + = CompassN | CompassE | CompassS | CompassW + | CompassNE | CompassNW | CompassSE | CompassSW + deriving (Eq, Show) + +data Subgraph + = NewSubgraph (Maybe Id) [Statement] + | SubgraphRef Id + deriving (Eq, Show) + +data Entity + = ENodeId EdgeType NodeId + | ESubgraph EdgeType Subgraph + deriving (Eq, Show) + +data EdgeType + = NoEdge + | DirectedEdge + | UndirectedEdge + deriving (Eq, Show) + +data Xml + = XmlEmptyTag XmlName [XmlAttribute] + | XmlTag XmlName [XmlAttribute] [Xml] + | XmlText String + deriving (Eq, Show) + +data XmlName + = XmlName String + deriving (Eq, Show) + +data XmlAttribute + = XmlAttribute XmlName XmlAttributeValue + deriving (Eq, Show) + +data XmlAttributeValue + = XmlAttributeValue String + deriving (Eq, Show) -- cgit v1.2.3