packages feed

dag-0.0.2.1: dag.cabal

Name:                   dag
Version:                0.0.2.1
Author:                 Athan Clark <athan.clark@gmail.com>
Maintainer:             Athan Clark <athan.clark@gmail.com>
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