---
title: Std.Control
---

Classic monadic effects: Reader (ambient environment) and Writer
(ambient append-only log), expressed as algebraic effects.

## Effects

### Reader

```saga
effect Reader r {
  fun ask : Unit -> r
}
```

Reader effect: an ambient read-only environment of type `r`.
Use `ask!` to read the environment from anywhere in the call tree;
install with `run_reader env (fun () -> ...)`.

### Tell

```saga
effect Tell w {
  fun tell : w -> Unit
}
```

Writer effect: an ambient append-only sink of type `w`. Use `tell!`
to push a value from anywhere in the call tree; install with
`run_writer (fun () -> ...)` to recover the pair (result, log).

## Functions

### run_reader

```saga
fun run_reader : (env: r) -> (f: Unit -> a needs {Reader r}) -> a
```

Run a Reader-effecting computation against the given environment.

### run_writer

```saga
fun run_writer : (f: Unit -> a needs {Tell w}) -> (a, List w)
```

Run a Tell-effecting computation, returning its value paired with
everything told, in chronological order.

