cudd alternatives and similar packages
Based on the "Data" category.
Alternatively, view cudd alternatives based on common mentions on social networks and blogs.
-
semantic-source
Parsing, analyzing, and comparing source code across many languages -
code-builder
Packages for defining APIs, running them, generating client code and documentation. -
text
Haskell library for space- and time-efficient operations over Unicode text. -
cassava
A CSV parsing and encoding library optimized for ease of use and high performance -
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
primitive
This package provides various primitive memory-related operations. -
resource-pool
A high-performance striped resource pooling implementation for Haskell -
discrimination
Fast linear time sorting and discrimination for a large class of data types -
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms -
dependent-sum
Dependent sums and supporting typeclasses for comparing and displaying them -
dependent-map
Dependently-typed finite maps (partial dependent products) -
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions -
orgmode-parse
Attoparsec parser combinators for parsing org-mode structured text! -
text-icu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text. -
scientific
Arbitrary-precision floating-point numbers represented using scientific notation
Clean code begins in your IDE with SonarLint
Do you think we are missing an alternative of cudd or a related project?
README
Haskell-CUDD
Haskell bindings to version 3.0.0 of the CUDD binary decision diagram library.
http://vlsi.colorado.edu/~fabio/CUDD/
This package provides two interfaces to the CUDD library:
- A purely functional one in
Cudd.Cudd
that automatically dereferences BDDs during garbage collection. - An ST Monad based one in
Cudd.Imperative
that gives you precise control over the ordering of BDD operations and when BDDs are dereferenced. Use this one if you want your code to perform well.
Also, for a higher level interface in the style of the ersatz SAT encoder, see https://github.com/jwaldmann/cudd-ersatz/.
Installation
Either install CUDD 3.0.0 using your system's package manager or download and install CUDD from here: http://vlsi.colorado.edu/~fabio/.
Then:
cabal install cudd
Depending on where CUDD is installed on your system, you may need to provide --extra-lib-dirs or --extra-include-dirs:
cabal install cudd --extra-lib-dirs=/usr/local/lib
Usage
The purely functional interface:
import Cudd.Cudd
main = do
let manager = cuddInit
v1 = ithVar manager 0
v2 = ithVar manager 1
conj = bAnd manager v1 v2
implies = lEq manager conj v1
print implies
The ST Monad based interface:
import Control.Monad.ST
import Cudd.Imperative
main = do
res <- stToIO $ withManagerDefaults $ \manager -> do
v1 <- ithVar manager 0
v2 <- ithVar manager 1
conj <- bAnd manager v1 v2
implies <- lEq manager conj v1
deref manager conj
return implies
print res