# Let and Bind

In Hakaru, we can give names for expressions to our programs with `=`

,
which we call *Let*. This gives us the ability to share computation
that might be needed in the program.

```
x = 2
x + 3
```

We can use `=`

to give a name to any expression in our language. The
name you assign is in scope for the rest of the body it was defined in.

## Bind

Hakaru also has the operator `<~`

. This operator, which call *Bind*
can only be used with expressions that denote probability distributions.
Bind allows us to talk about draws from a distribution using a name for
any particular value that could have come from that distribution.

```
# Bad
x <~ 2 + 3
x
```

```
# Good
x <~ normal(0,1)
return x
```

Because Bind is about draws from a distribution, the rest of the body must also denote a probability distribution.

```
# Bad
x <~ normal(0,1)
x
```

```
# Good
x <~ normal(0,1)
return x
```

To help distinguish Let and Bind. Here is a probabilistic program, where we
let *f* be equal to the normal distribution, and take draws from *f*.

```
f = normal(0,1)
x <~ f
return x*x
```