packages feed

cudd-0.1.0.4: Readme.md

# 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](https://hackage.haskell.org/package/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:

```haskell
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:

```haskell
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
```