| 47 | const setMines = (mines: ReadonlyArray<Mine>) => minesStore.set("mines", mines).pipe(Effect.orDie) |
| 48 | |
| 49 | const createShip: NavalFateStore["createShip"] = (name) => |
| 50 | Effect.gen(function*() { |
| 51 | const oldShips = yield* getShips |
| 52 | const foundShip = Option.fromNullable(oldShips.get(name)) |
| 53 | if (Option.isSome(foundShip)) { |
| 54 | return yield* Effect.fail(new ShipExistsError({ name })) |
| 55 | } |
| 56 | const ship = Ship.create(name) |
| 57 | const newShips = new Map(oldShips).set(name, ship) |
| 58 | yield* setShips(newShips) |
| 59 | return ship |
| 60 | }) |
| 61 | |
| 62 | const moveShip: NavalFateStore["moveShip"] = (name, x, y) => |
| 63 | Effect.gen(function*() { |