diff --git a/ecta.cabal b/ecta.cabal
--- a/ecta.cabal
+++ b/ecta.cabal
@@ -1,215 +1,290 @@
-cabal-version:      1.12
-name:               ecta
-version:            1.0.0.0
-license:            BSD3
-license-file:       LICENSE
-copyright:          2021 Jimmy Koppel
-maintainer:         darmanithird@gmail.com
-author:             Jimmy Koppel
-homepage:           https://github.com/jkoppel/ecta#readme
-bug-reports:        https://github.com/jkoppel/ecta/issues
-description:
-    Please see the README on GitHub at <https://github.com/jkoppel/ecta#readme>
+cabal-version: 1.12
 
-build-type:         Simple
+-- This file has been generated from package.yaml by hpack version 0.34.4.
+--
+-- see: https://github.com/sol/hpack
+
+name:           ecta
+version:        1.0.0.1
+description:    Please see the README on GitHub at <https://github.com/jkoppel/ecta#readme>
+homepage:       https://github.com/jkoppel/ecta#readme
+bug-reports:    https://github.com/jkoppel/ecta/issues
+author:         Jimmy Koppel
+maintainer:     darmanithird@gmail.com
+copyright:      2021 Jimmy Koppel
+license:        BSD3
+license-file:   LICENSE
+build-type:     Simple
 extra-source-files:
     README.md
     ChangeLog.md
 
 source-repository head
-    type:     git
-    location: https://github.com/jkoppel/ecta
+  type: git
+  location: https://github.com/jkoppel/ecta
 
 flag profile-caches
-    default: False
-    manual:  True
+  manual: True
+  default: False
 
 library
-    exposed-modules:
-        Application.SAT
-        Application.TermSearch.Dataset
-        Application.TermSearch.Evaluation
-        Application.TermSearch.TermSearch
-        Application.TermSearch.Type
-        Application.TermSearch.Utils
-        Data.ECTA
-        Data.ECTA.Internal.ECTA.Enumeration
-        Data.ECTA.Internal.ECTA.Operations
-        Data.ECTA.Internal.ECTA.Type
-        Data.ECTA.Internal.ECTA.Visualization
-        Data.ECTA.Internal.Paths
-        Data.ECTA.Internal.Paths.Zipper
-        Data.ECTA.Internal.Term
-        Data.ECTA.Paths
-        Data.ECTA.Term
-        Data.HashTable.Extended
-        Data.Interned.Extended.HashTableBased
-        Data.Interned.Extended.SingleThreaded
-        Data.Memoization
-        Data.Memoization.Metrics
-        Data.Persistent.UnionFind
-        Data.Text.Extended.Pretty
-        Utility.Fixpoint
-        Utility.HashJoin
-
-    hs-source-dirs:     src
-    other-modules:      Paths_ecta
-    default-language:   Haskell2010
-    default-extensions:
-        BangPatterns ConstraintKinds DataKinds DefaultSignatures
-        DeriveDataTypeable DeriveGeneric EmptyDataDecls
-        ExistentialQuantification FlexibleContexts FlexibleInstances
-        FunctionalDependencies GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        PatternGuards PatternSynonyms RankNTypes ScopedTypeVariables
-        StandaloneDeriving TupleSections TypeApplications TypeFamilies
-        TypeOperators ViewPatterns
-
-    ghc-options:        -Wall
-    build-depends:
-        array >=0.5.4.0 && <0.6,
-        base >=4.14.3.0 && <4.15,
-        cmdargs >=0.10.21 && <0.11,
-        containers >=0.6.5.1 && <0.7,
-        equivalence >=0.3.5 && <0.4,
-        extra >=1.7.9 && <1.8,
-        fgl >=5.7.0.3 && <5.8,
-        hashable >=1.3.0.0 && <1.4,
-        hashtables >=1.2.4.2 && <1.3,
-        ilist >=0.4.0.1 && <0.5,
-        intern >=0.9.4 && <0.10,
-        language-dot >=0.1.1 && <0.2,
-        lens >=4.19.2 && <4.20,
-        mtl >=2.2.2 && <2.3,
-        pipes >=4.3.16 && <4.4,
-        pretty-simple >=4.0.0.0 && <4.1,
-        raw-strings-qq ==1.1.*,
-        text >=1.2.4.1 && <1.3,
-        time >=1.9.3 && <1.10,
-        unordered-containers >=0.2.16.0 && <0.3,
-        vector >=0.12.3.1 && <0.13,
-        vector-instances ==3.4.*
-
-    if flag(profile-caches)
-        cpp-options: -DPROFILE_CACHES
+  exposed-modules:
+      Application.SAT
+      Application.TermSearch.Dataset
+      Application.TermSearch.Evaluation
+      Application.TermSearch.TermSearch
+      Application.TermSearch.Type
+      Application.TermSearch.Utils
+      Data.ECTA
+      Data.ECTA.Internal.ECTA.Enumeration
+      Data.ECTA.Internal.ECTA.Operations
+      Data.ECTA.Internal.ECTA.Type
+      Data.ECTA.Internal.ECTA.Visualization
+      Data.ECTA.Internal.Paths
+      Data.ECTA.Internal.Paths.Zipper
+      Data.ECTA.Internal.Term
+      Data.ECTA.Paths
+      Data.ECTA.Term
+      Data.HashTable.Extended
+      Data.Interned.Extended.HashTableBased
+      Data.Interned.Extended.SingleThreaded
+      Data.Memoization
+      Data.Memoization.Metrics
+      Data.Persistent.UnionFind
+      Data.Text.Extended.Pretty
+      Utility.Fixpoint
+      Utility.HashJoin
+  other-modules:
+      Paths_ecta
+  hs-source-dirs:
+      src
+  default-extensions:
+      BangPatterns
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveGeneric
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      NamedFieldPuns
+      PatternGuards
+      PatternSynonyms
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeOperators
+      ViewPatterns
+  ghc-options: -Wall
+  build-depends:
+      array
+    , base >=4.13 && <5
+    , cmdargs
+    , containers
+    , equivalence
+    , extra
+    , fgl
+    , hashable
+    , hashtables
+    , ilist
+    , intern
+    , language-dot ==0.1.1
+    , lens
+    , mtl
+    , pipes
+    , pretty-simple
+    , raw-strings-qq
+    , text
+    , time
+    , unordered-containers
+    , vector
+    , vector-instances
+  if flag(profile-caches)
+    cpp-options: -DPROFILE_CACHES
+  default-language: Haskell2010
 
 executable hectare
-    main-is:            Main.hs
-    hs-source-dirs:     app
-    other-modules:      Paths_ecta
-    default-language:   Haskell2010
-    default-extensions:
-        BangPatterns ConstraintKinds DataKinds DefaultSignatures
-        DeriveDataTypeable DeriveGeneric EmptyDataDecls
-        ExistentialQuantification FlexibleContexts FlexibleInstances
-        FunctionalDependencies GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        PatternGuards PatternSynonyms RankNTypes ScopedTypeVariables
-        StandaloneDeriving TupleSections TypeApplications TypeFamilies
-        TypeOperators ViewPatterns
-
-    ghc-options:        -threaded -rtsopts -with-rtsopts=-N -Wall
-    build-depends:
-        base >=4.14.3.0 && <4.15,
-        cmdargs >=0.10.21 && <0.11,
-        containers >=0.6.5.1 && <0.7,
-        ecta -any,
-        hashable >=1.3.0.0 && <1.4,
-        language-dot >=0.1.1 && <0.2,
-        mtl >=2.2.2 && <2.3,
-        pipes >=4.3.16 && <4.4,
-        pretty-simple >=4.0.0.0 && <4.1,
-        text >=1.2.4.1 && <1.3,
-        time >=1.9.3 && <1.10,
-        unordered-containers >=0.2.16.0 && <0.3,
-        vector >=0.12.3.1 && <0.13
-
-    if flag(profile-caches)
-        cpp-options: -DPROFILE_CACHES
+  main-is: Main.hs
+  other-modules:
+      Paths_ecta
+  hs-source-dirs:
+      app
+  default-extensions:
+      BangPatterns
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveGeneric
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      NamedFieldPuns
+      PatternGuards
+      PatternSynonyms
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeOperators
+      ViewPatterns
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+  build-depends:
+      base >=4.13 && <5
+    , cmdargs
+    , containers
+    , ecta
+    , hashable
+    , language-dot ==0.1.1
+    , mtl
+    , pipes
+    , pretty-simple
+    , text
+    , time
+    , unordered-containers
+    , vector
+  if flag(profile-caches)
+    cpp-options: -DPROFILE_CACHES
+  default-language: Haskell2010
 
 test-suite unit-tests
-    type:               exitcode-stdio-1.0
-    main-is:            Spec.hs
-    build-tool-depends: hspec-discover:hspec-discover -any
-    hs-source-dirs:     test
-    other-modules:
-        CacheProfilingSpec
-        Data.Persistent.UnionFindSpec
-        ECTASpec
-        PathsSpec
-        SATSpec
-        Test.Generators.ECTA
-        Utility.HashJoinSpec
-        Paths_ecta
-
-    default-language:   Haskell2010
-    default-extensions:
-        BangPatterns ConstraintKinds DataKinds DefaultSignatures
-        DeriveDataTypeable DeriveGeneric EmptyDataDecls
-        ExistentialQuantification FlexibleContexts FlexibleInstances
-        FunctionalDependencies GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        PatternGuards PatternSynonyms RankNTypes ScopedTypeVariables
-        StandaloneDeriving TupleSections TypeApplications TypeFamilies
-        TypeOperators ViewPatterns
-
-    ghc-options:        -threaded -rtsopts -with-rtsopts=-N -Wall -Wno-orphans
-    build-depends:
-        QuickCheck >=2.14.2 && <2.15,
-        base >=4.14.3.0 && <4.15,
-        cmdargs >=0.10.21 && <0.11,
-        containers >=0.6.5.1 && <0.7,
-        ecta -any,
-        equivalence >=0.3.5 && <0.4,
-        hashable >=1.3.0.0 && <1.4,
-        hspec >=2.7.10 && <2.8,
-        language-dot >=0.1.1 && <0.2,
-        mtl >=2.2.2 && <2.3,
-        pipes >=4.3.16 && <4.4,
-        pretty-simple >=4.0.0.0 && <4.1,
-        text >=1.2.4.1 && <1.3,
-        time >=1.9.3 && <1.10,
-        unordered-containers >=0.2.16.0 && <0.3,
-        vector >=0.12.3.1 && <0.13
-
-    if flag(profile-caches)
-        cpp-options: -DPROFILE_CACHES
+  type: exitcode-stdio-1.0
+  main-is: Spec.hs
+  other-modules:
+      CacheProfilingSpec
+      Data.Persistent.UnionFindSpec
+      ECTASpec
+      PathsSpec
+      SATSpec
+      Test.Generators.ECTA
+      Utility.HashJoinSpec
+      Paths_ecta
+  hs-source-dirs:
+      test
+  default-extensions:
+      BangPatterns
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveGeneric
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      NamedFieldPuns
+      PatternGuards
+      PatternSynonyms
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeOperators
+      ViewPatterns
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Wno-orphans
+  build-depends:
+      QuickCheck
+    , base >=4.13 && <5
+    , cmdargs
+    , containers
+    , ecta
+    , equivalence
+    , hashable
+    , hspec
+    , language-dot ==0.1.1
+    , mtl
+    , pipes
+    , pretty-simple
+    , text
+    , time
+    , unordered-containers
+    , vector
+  if flag(profile-caches)
+    cpp-options: -DPROFILE_CACHES
+  default-language: Haskell2010
+  build-tool-depends:
+    hspec-discover:hspec-discover
 
 benchmark mainbench
-    type:               exitcode-stdio-1.0
-    main-is:            Benchmarks.hs
-    hs-source-dirs:     benchmarks
-    other-modules:
-        TestData
-        Paths_ecta
-
-    default-language:   Haskell2010
-    default-extensions:
-        BangPatterns ConstraintKinds DataKinds DefaultSignatures
-        DeriveDataTypeable DeriveGeneric EmptyDataDecls
-        ExistentialQuantification FlexibleContexts FlexibleInstances
-        FunctionalDependencies GADTs GeneralizedNewtypeDeriving
-        KindSignatures LambdaCase MultiParamTypeClasses NamedFieldPuns
-        PatternGuards PatternSynonyms RankNTypes ScopedTypeVariables
-        StandaloneDeriving TupleSections TypeApplications TypeFamilies
-        TypeOperators ViewPatterns
-
-    ghc-options:        -threaded -rtsopts -with-rtsopts=-N -O2
-    build-depends:
-        base >=4.14.3.0 && <4.15,
-        cmdargs >=0.10.21 && <0.11,
-        containers >=0.6.5.1 && <0.7,
-        criterion >=1.5.13.0 && <1.6,
-        ecta -any,
-        hashable >=1.3.0.0 && <1.4,
-        language-dot >=0.1.1 && <0.2,
-        mtl >=2.2.2 && <2.3,
-        pipes >=4.3.16 && <4.4,
-        pretty-simple >=4.0.0.0 && <4.1,
-        text >=1.2.4.1 && <1.3,
-        time >=1.9.3 && <1.10,
-        unordered-containers >=0.2.16.0 && <0.3,
-        vector >=0.12.3.1 && <0.13
-
-    if flag(profile-caches)
-        cpp-options: -DPROFILE_CACHES
+  type: exitcode-stdio-1.0
+  main-is: Benchmarks.hs
+  other-modules:
+      TestData
+      Paths_ecta
+  hs-source-dirs:
+      benchmarks
+  default-extensions:
+      BangPatterns
+      ConstraintKinds
+      DataKinds
+      DefaultSignatures
+      DeriveDataTypeable
+      DeriveGeneric
+      EmptyDataDecls
+      ExistentialQuantification
+      FlexibleContexts
+      FlexibleInstances
+      FunctionalDependencies
+      GADTs
+      GeneralizedNewtypeDeriving
+      KindSignatures
+      LambdaCase
+      MultiParamTypeClasses
+      NamedFieldPuns
+      PatternGuards
+      PatternSynonyms
+      RankNTypes
+      ScopedTypeVariables
+      StandaloneDeriving
+      TupleSections
+      TypeApplications
+      TypeFamilies
+      TypeOperators
+      ViewPatterns
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2
+  build-depends:
+      base >=4.13 && <5
+    , cmdargs
+    , containers
+    , criterion
+    , ecta
+    , hashable
+    , language-dot ==0.1.1
+    , mtl
+    , pipes
+    , pretty-simple
+    , text
+    , time
+    , unordered-containers
+    , vector
+  if flag(profile-caches)
+    cpp-options: -DPROFILE_CACHES
+  default-language: Haskell2010
