Name: dag Version: 0.0.2.1 Author: Athan Clark Maintainer: Athan Clark License: BSD3 License-File: LICENSE Synopsis: Basic type-safe directed acyclic graphs. Description: This is a type-safe approach for a directed acyclic graph. . Edge construction is incremental, creating a "schema": . > import Data.Graph.DAG.Edge > > -- | Edges are statically defined: > edges = > ECons (Edge :: EdgeValue "foo" "bar") $ > ECons (Edge :: EdgeValue "bar" "baz") $ > ECons (Edge :: EdgeValue "foo" "baz") > unique -- ENil, but casted for uniquely edged graphs . The nodes are separate from edges; graph may be not connected: . > data Cool = AllRight > | Radical > | SuperDuper > > graph = > GCons "foo" AllRight $ > GCons "bar" Radical $ > GCons "baz" SuperDuper $ > GNil edges . Some type tomfoolery: . > *Data.Graph.DAG> :t edges > > edges > :: EdgeSchema > '['EdgeType "foo" "bar", 'EdgeType "bar" "baz", > 'EdgeType "foo" "baz"] -- Type list of edges > '['("foo", '["bar", "baz"]), '("bar", '["baz"])] -- potential loops > 'True -- uniqueness > > *Data.Graph.DAG> :t getSpanningTrees $ edges > > getSpanningTrees $ edges > :: Data.Proxy.Proxy > '['Node "foo" '['Node "bar" '['Node "baz" '[]], > 'Node "baz" '[]], > 'Node "bar" '['Node "baz" '[]], > 'Node "baz" '[]] > > *Data.Graph.DAG> reflect $ getSpanningTrees $ edges > > [Node "foo" [Node "bar" [Node "baz" []] > ,Node "baz" []] > ,Node "bar" [Node "baz" []] > ,Node "baz" []] . This library is still very naive, but it will give us compile-time enforcement of acyclicity (and uniqueness) in these graphs - ideal for dependency graphs. Cabal-Version: >= 1.10 Build-Type: Simple Library Default-Language: Haskell2010 HS-Source-Dirs: src GHC-Options: -Wall Exposed-Modules: Data.Graph.DAG Data.Graph.DAG.Edge Data.Graph.DAG.Edge.Utils Build-Depends: base >= 4.7 && < 5 , constraints , singletons Test-Suite spec Type: exitcode-stdio-1.0 Default-Language: Haskell2010 Hs-Source-Dirs: src , test Ghc-Options: -Wall Main-Is: Spec.hs Build-Depends: base , hspec , QuickCheck , quickcheck-instances Source-Repository head Type: git Location: https://github.com/athanclark/dag