dag: Basic type-safe directed acyclic graphs.

[ bsd3, library, unclassified ] [ Propose Tags ]
This version is deprecated.

This is a type-safe approach for a directed acyclic graph.

Edge construction is inductive, 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 for uniquely edged graphs

Which we use to populate nodes with values:

 data Cool = AllRight
           | Radical
           | SuperDuper

 graph = GCons "foo" AllRight $
   GCons "bar" Radical $
   GCons "baz" SuperDuper $
   GNil edges

It's an instance of Functor, but we haven't done much here - it will require a lot of reflection that I don't have time to implement right now - there isn't even binding of value-based GCons keys and ECons edge node labels.

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" '[]]

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.

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.0.1, 0.0.2, 0.0.2.1, 0.1, 0.1.0.1, 0.1.0.2 (info)
Dependencies base (>=4 && <5), constraints [details]
License BSD-3-Clause
Author Athan Clark <athan.clark@gmail.com>
Maintainer Athan Clark <athan.clark@gmail.com>
Source repo head: git clone https://github.com/athanclark/dag
Uploaded by athanclark at 2015-01-19T02:20:35Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 3391 total (17 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]