Copyright (c) Samuel Schlesinger 2020 MIT sgschlesinger@gmail.com experimental POSIX, Windows Safe-Inferred Haskell2010

Description

Synopsis

The CommanderT monad is stateful and has the ability to backtrack.

data CommanderT state f a Source #

A CommanderT action is a metaphor for a military commander. At each step, we have a new Action to take, or we could have experienced Defeat, or we can see Victory. While a real life commander worries about moving his troops around in order to achieve a victory in battle, a CommanderT worries about iteratively transforming a state to find some value.

In more practical terms, a term of type CommanderT can be thought of as a backtracking, stateful computation which can either result in a result being produced, or nothing being produced. It is a Monad for any base Functor you want to use as the effect inside of the stateful computation, similarly to the free monad.

Constructors

 Action (state -> f (CommanderT state f a, state)) Defeat Victory a

#### Instances

Instances details
We can run a CommanderT on some state and see if it has a successful campaign.
We can go from a non-Functor to a Functor inside of a CommanderT action. This does the transformation "top to bottom", as opposed to hoistFromFunctor, which does it "bottom to top". If your natural transformation is lessening, i.e. it trims branching structure, then you probably want to use this function.
We can go from a Functor to a non-Functor inside of a CommanderT action. This does the transformation "bottom to top", as opposed to hoistToFunctor, which does it "top to bottom". If your natural transformation is increasing, i.e. it adds branching structure, then you probably want to use this function.