dag alternatives and similar packages
Based on the "Unclassified" category.
Alternatively, view dag alternatives based on common mentions on social networks and blogs.
-
gotta-go-fast
A command line utility for practicing typing and measuring your WPM and accuracy. -
heroku-persistent
Parse DATABASE_URL into configuration types for Persistent -
bit-stream
Lazy infinite compact streams with cache-friendly O(1) indexing and applications for memoization -
ascii-art-to-unicode
Small program to convert ASCII box art to Unicode box drawings. -
rollbar-cli
A group of libraries written in Haskell to communicate with Rollbar API. -
hackertyper
"Hack" like a programmer in movies and games! Inspired by hackertyper.net -
base-unicode-symbols
Unicode alternatives for common functions and operators -
aeson-serialize
Functions for serializing a type that is an instance of ToJSON -
dependent-sum-template
Template Haskell code to generate instances of classes in dependent-sum package -
argon2
Haskell bindings to libargon2 - the reference implementation of the Argon2 password-hashing function -
servant-streaming
Support for servant requests and responses via the 'streaming' library -
containers-unicode-symbols
Unicode alternatives for common functions and operators -
semver-range
Implementation of semver and NPM-style semantic version ranges in Haskell
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of dag or a related project?
Popular Comparisons
README
dag
Directed Acyclic Graphs for Haskell
Description
This is a type-safe directed acyclic graph library for Haskell. This library differs from others in a number of ways:
- Edge construction is incremental, creating a "schema":
{-# LANGUAGE DataKinds #-}
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
- Type safety throughout edge construction:
*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
- Various type-level computation
*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 in these graphs - ideal for dependency graphs.
Usage
You will need -XDataKinds
for the type-level symbols:
{-# LANGUAGE DataKinds #-}
import Data.Graph.DAG
import GHC.TypeLits
...