# RAN001 Fable inlines a snapshot of a module mutable

`warning RAN001`: *Fable Release compiles `setups` as a second read of `Loops.childSetups` at its single use (line 5),
so writes between the two lines change it.*

**Cause.** Fable 5.18 Release, Fickl 0.3.0 (Fable 5.22) Release, and the pinned Fickl 0.5.3 (Fable 5.23) Release replace a single-use immutable `let` whose
right-hand side is a bare read of a module-level `let mutable` declared in another file with a second read at the use.
The snapshot then sees the writes made between the binding and the use. A use inside a closure and a tuple pattern are
inlined the same way. The rule runs in a project that Fable compiles, whichever compiler version builds it: see
[Where the rules run](index.md#where-the-rules-run).

**Fix.** Declare the snapshot `let mutable`. The rule's fix inserts `mutable`; a tuple pattern has no fix.

The mutable lives in another file:

### Shared: Loops.fs

```fsharp
module Loops

let mutable childSetups = 0

let setup () = childSetups <- childSetups + 1
```

### Triggers

```fsharp
module Example

let snapshot () =
    let setups = Loops.childSetups
    Loops.setup ()
    Loops.childSetups - setups
```

### Fixed

```fsharp
module Example

let snapshot () =
    let mutable setups = Loops.childSetups
    Loops.setup ()
    Loops.childSetups - setups
```

**Suppression.** `// fsharpanalyzer: ignore-line-next RAN001`, with the reason on the line before.
