# Enum operational::Program [−] [src]

```pub enum Program<'a, I: Instr, A> {
Pure(Box<A>),
Then(Box<I>, Kleisli<'a, I, I::Return, A>),
}```

Represents a program, i.e. a sequence of instructions.

• The instructions are given by the type `I`.
• `A` is the return type of the program.

## Variants

The case `Pure(a)` means that the program contains no instructions and just returns the result `a`.

The case `Then(instr, k)` means that the first instruction is `instr` and the remaining program is given by the kleisli arrow `k`.

## Methods

### `impl<'a, I: 'a + Instr, A> Program<'a, I, A>`[src]

#### `fn and_then<B, F>(self, js: F) -> Program<'a, I, B> where    F: 'a + Fn(A) -> Program<'a, I, B>, `

Appends a continuation to a program. Which means, given a function from `A` to `Program<I, B>`, passes the return value of the program to the function, and returns the resulting program.

Equivalent to the monadic `>>=` operator.

#### `fn map<B, F>(self, f: F) -> Program<'a, I, B> where    F: 'a + Fn(A) -> B, `

Modifies the return value of the program. Seen differently, it lifts a function from `A` to `B` into a function from `Program<I, A>` to `Program<I, B>`.

Equivalent to the monadic `liftM`.

## Trait Implementations

### `impl<'a, I: 'a + Instr, A: PartialEq> PartialEq for Program<'a, I, A>`[src]

#### `fn eq(&self, other: &Program<'a, I, A>) -> bool`

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `fn ne(&self, other: &Rhs) -> bool`1.0.0

This method tests for `!=`.

### `impl<'a, I: 'a + Instr, A: Debug> Debug for Program<'a, I, A>`[src]

#### `fn fmt(&self, f: &mut Formatter) -> Result`

Formats the value using the given formatter.