I prefer this kind of style for do blocks with where clauses:

```haskell
evalBuild fs is b =
  do (_, s) <- ...
     ...
  where
    notUpdated i = ...
```

It makes it clearer to me that the do comes with some other stuff. Also, I think it'd be worthwhile to have nicer names for the inputs.