polysemy-methodology
polysemy-methodology provides an algebra for domain modelling in polysemy.
A simple program might look something like this:
prog :: Members '[ Input a
, Methodology a b
, Output b]
prog = input @a >>= process @a @b >>= output @b
That is, this program transforms an Input a
into an Output b
by way of a
Methodology a b
that turns a
into b
. We can then type apply a
and b
and connect this to main
.
If we have a solution readily available, we can consume a Methodology
by
running one of the interpreters runMethodologyPure
or runMethodologySem
.
Otherwise, we can use the other interpreters in this package to break the
problem down into components or branches and solve each section separately.
Each interpreter will produce a new set of Methodology
s to be solved.
This allows you to work up a solution to a domain problem backwards, by running the program you intend to solve directly and using holes to guide the requirements.