packages feed

hegg-0.2.0.0: hegg.cabal

cabal-version:      2.4
name:               hegg
version:            0.2.0.0
Tested-With:        GHC ==9.4.1 || ==9.2.2 || ==9.0.2 || ==8.10.7
synopsis:           Fast equality saturation in Haskell

description:        Fast equality saturation and equality graphs based on "egg:
                    Fast and Extensible Equality Saturation" and "Relational E-matching".
                    .
                    This package provides e-graphs (see "Data.Equality.Graph"),
                    a data structure which efficiently represents a congruence
                    relation over many expressions.
                    .
                    For a monadic interface to e-graphs check out
                    "Data.Equality.Graph.Monad" (home to the convenient
                    function 'represent').
                    .
                    Secondly, it provides functions for doing equality
                    saturation (see "Data.Equality.Saturation"), an
                    optimization/term-rewriting technique that applies rewrite
                    rules non-destructively to an expression represented in an
                    e-graph until saturation, and then extracts the best
                    representation.
                    .
                    Equality matching (see "Data.Equality.Matching") is done as
                    described in "Relational E-Matching"
                    .
                    For a walkthrough of writing a simple symbolic
                    simplification program see the [hegg symbolic
                    tutorial](https://github.com/alt-romes/hegg#equality-saturation-in-haskell).
                    .
                    Additional information can be found [in the README](https://github.com/alt-romes/hegg).

homepage:           https://github.com/alt-romes/hegg
bug-reports:        https://github.com/alt-romes/hegg/issues
license:            BSD-3-Clause
author:             Rodrigo Mesquita <romes>
maintainer:         Rodrigo Mesquita <rodrigo.m.mesquita@gmail.com>
copyright:          Copyright (C) 2022 Rodrigo Mesquita
category:           Data
extra-source-files: CHANGELOG.md
                    README.md

source-repository head
    type: git
    location: https://github.com/alt-romes/hegg

library
    ghc-options:      -Wall -Wcompat

                      -- -fno-prof-auto

                      -- -ddump-simpl
                      -- -ddump-to-file
                      -- -dsuppress-ticks
                      -- -dsuppress-stg-exts
                      -- -dsuppress-coercions
                      -- -dsuppress-idinfo
                      -- -dsuppress-unfoldings
                      -- -dsuppress-module-prefixes
                      -- -dsuppress-timestamps
                      -- -dsuppress-uniques
                      -- -dsuppress-var-kinds

    exposed-modules:  Data.Equality.Graph,
                      Data.Equality.Graph.Internal,
                      Data.Equality.Graph.ReprUnionFind,
                      Data.Equality.Graph.Classes,
                      Data.Equality.Graph.Classes.Id,
                      Data.Equality.Graph.Nodes,
                      Data.Equality.Graph.Lens,
                      Data.Equality.Graph.Monad,
                      Data.Equality.Matching,
                      Data.Equality.Matching.Database,
                      Data.Equality.Matching.Pattern,
                      Data.Equality.Saturation,
                      Data.Equality.Extraction,
                      Data.Equality.Language,
                      Data.Equality.Analysis,
                      Data.Equality.Saturation.Scheduler,
                      Data.Equality.Saturation.Rewrites,
                      Data.Equality.Utils,
                      Data.Equality.Utils.SizedList
    if impl(ghc >= 9.2)
        exposed-modules: Data.Equality.Utils.IntToIntMap

    if flag(vizdot)
        exposed-modules: Data.Equality.Graph.Dot

    -- Modules included in this library but not exported.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    build-depends:    base         >= 4.4 && < 5,
                      transformers >= 0.4 && < 0.7,
                      containers   >= 0.4 && < 0.7
    if flag(vizdot)
        build-depends: graphviz >= 2999.6 && < 2999.7
    hs-source-dirs:   src
    default-language: Haskell2010

test-suite hegg-test
    ghc-options:      -Wall
                      -- -finfo-table-map -fdistinct-constructor-tables
                      -threaded
    default-language: Haskell2010
    type:             exitcode-stdio-1.0
    hs-source-dirs:   test
    main-is:          Test.hs
    other-modules:    Invariants, Sym, Lambda, SimpleSym
    other-extensions: OverloadedStrings
    build-depends:    base,
                      hegg,
                      containers,
                      deriving-compat  >= 0.6 && < 0.7,
                      tasty            >= 1.4 && < 1.5,
                      tasty-hunit      >= 0.10 && < 0.11,
                      tasty-quickcheck >= 0.10 && < 0.11

benchmark hegg-bench
  default-language: Haskell2010
  hs-source-dirs: test
  other-modules:  Invariants, Sym, Lambda, SimpleSym
  main-is:        Bench.hs
  type:           exitcode-stdio-1.0
  build-depends:  base, hegg,
                  containers,
                  deriving-compat,
                  tasty,
                  tasty-hunit,
                  tasty-quickcheck,
                  tasty-bench >= 0.2  && < 0.4
  ghc-options:    -with-rtsopts=-A32m -threaded

Flag vizdot
    Description: Compile 'Data.Equality.Graph.Dot' module to visualize e-graphs
    Manual: True
    Default: False