# 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.