TODO for Conjure
================
A non-exhaustive list of things TO DO for Conjure.
* Warn when there are no tests!
Test this on high order functions.
Encode `error "could not reify specification"`
* change cannot conjure to "search exhausted",
to indicate that Conjure has _shown_ that
there is no way to build the given function
with the given ingredients up to the given size.
* Expand tests on `conjurableOK`?
* Add `test/conjure.hs` with some basic conjuring...
* Fix bug with pairwise in eg/tuple
* Allow timeout setting?
* Rethink Conjurable typeclass?
* Rename primitives to ingredients?
* Allow chains of guards (see below).
* Move `Args` into `[Prim]`?
* Better error reporting when `Listable` is out-of-scope when using `deriveConjurable`.
This needs to be implemented on LeanCheck itself.
* forbid recursion into negatives (see below)
* Warn when no tests are present somehow?
## Allow chains of guards
With the use of `guard` right now,
Conjure can generate functions such as the following:
function x y z
| x < 123 = ...
| otherwise = ...
We should probably allow chains of guards such as the following:
function x y z
| x < 123 = ...
| x == 321 = ...
| y == 12 = ...
| otherwise = ...
Internally, these are just chains of if-then-else applications:
function x y z = if x < 123
then ...
else if x == 321
then ...
else if y == 12
then ...
else ...
This change shouldn't be so complicated to introduce
requiring a change in `enumerateAppsFor` relaxing `ufor hx`
depending on what we have on the left...
## Forbid recursion into negatives
Instead of reporting:
tri 1 = 1
tri x = x + tri (x - 1)
Report:
tri 1 = 1
tri x | x > 1 = x + tri (x - 1)
This is not trivial to implement.
Tentative steps:
1. create a `descents` function, similar to `descends`,
that is able to list the groups of variable that have recursive descents.
This will somehow need a dummy `isDecOf` function.
This may require changing the format definitions themselves...
2. use this on `showDefn` somehow
3. use this on `toDynamicWithDefn` somehow
This file is part of Conjure,
(C) 2021-2025 Rudy Matela,
Distribued under the 3-Clause BSD license.