# Changelog
All notable changes to this project (as seen by library users) will be documented in this file.
The CHANGELOG is available on [Github](https://github.com/luc-tielen/souffle-haskell.git/CHANGELOG.md).
## [2.0.0] - 2020-08-23
### Added
- The `Fact` typeclass now also requires you to specify the `FactDirection`.
This prevents inconsistent and buggy behavior when trying to use a fact in
an invalid way (e.g. trying to add an output-only fact).
- DSL for creating Soufflé programs directly from Haskell.
See the docs of `Language.Souffle.Experimental` for more information.
### Changed
- souffle-haskell now supports Soufflé version 2.0.1.
- `getFacts`, `findFact`, `addFact` and `addFacts` now have stricter
constraints in their type signatures to prevent invalid usage of facts.
- `runSouffle` for both compiled and interpreted mode and `runSouffleWith`
for interpreted mode have updated type signatures to be able to
automatically cleanup temporary files created while interacting with Souffle.
### Removed
- `init` function for both compiled and interpreted mode. Initialization is
now handled by the `runSouffle*` functions. This change makes automatic
cleanup of created files possible and prevents double initialization of
Souffle programs.
- `cleanup` function for interpreted mode, this is handled automatically now.
## [1.1.0] - 2020-07-26
### Added
- getFacts can now return facts in a fixed size array (from the array package).
- Added support for facts containing "unsigned" values.
- Added support for facts containing "float" values.
### Fixed
- The `run` function in `Language.Souffle.Interpeted` now always closes
stdout and stderr handles of the external souffle process.
### Removed
- `Language.Souffle` module is removed since it only existed due to legacy
reasons. This removal forces users to be explicit about the mode they are
using souffle-haskell in (interpreted or compiled mode). If you experience
compilation errors, rename all imports of `Language.Souffle` to
`Language.Souffle.Compiled`.
## [1.0.0] - 2020-07-09
### Changed
- Libraries using souffle-haskell are now "self-contained": if a project
depends on such a library, it will not require to also have Souffle installed.
- souffle-haskell now supports Soufflé version 2.0.0.
- `writeFiles` now takes an extra `FilePath` argument for writing facts to a
certain directory.
### Deleted
- Language.Souffle.TH module is deleted because it is no longer needed anymore
due to a change in the generated Souffle code. The generated code can now be
correctly integrated by adding the files to `cxx-sources`
in package.yaml / cabal file.
## [0.2.3] - 2020-05-21
### Changed
- Optimize performance when marshalling and unmarshalling facts.
## [0.2.2] - 2020-04-30
### Changed
- Fix compile time issue when generically deriving `Marshal` typeclass
for data types with more than 3 fields.
## [0.2.1] - 2020-04-25
### Changed
- Trimmed dependencies to make the library more lightweight.
## [0.2.0] - 2020-04-22
### Added
- Added Language.Souffle.Interpreted module for running Souffle programs in interpreted mode.
NOTE: For this mode the CSV fact files must use TAB (`'\t'`) characters as separators.
- In interpreted mode, you can configure where the library looks for datalog files or where
the souffle executable is located. For more information, see the `runSouffle` and `runSouffleWith`
functions in the Language.Souffle.Interpreted module.
### Changed
- Introduced Language.Souffle.Class module as separation of the typeclass and the
Language.Souffle.Compiled module to offer a uniform API in both interpreted and compiled mode.
## [0.1.0] - 2019-12-21
### Added
- Added Marshal instance for lazy and strict Text
### Changed
- getFacts can now return a vector instead of a list, based on type inference.
This allows for a more efficient representation in memory as well
as being able to allocate all needed memory once before collecting facts.
## [0.0.1] - 2019-10-23
### Added
- Initial version of the library