package snake /** * Optional (Exercise 4.7). A `State[S, A]` is a plain function from a state to a pair: `s => (value, nextS)`. * It is `Random[A]` with the seed replaced by any state type `S`. Nothing in the game uses this file. * `run` is the case class's field, so there is nothing to write for it. */ final case class State[S, A](run: S => (A, S)): /** Transform the value this State produces; the state threading is unchanged. */ def map[B](f: A => B): State[S, B] = ??? /** Run this State, feed its value to `f` to pick the next State, and run that with the state this one left behind. */ def flatMap[B](f: A => State[S, B]): State[S, B] = ??? object State: /** A State that gives `a` and leaves the state untouched: `s => (a, s)`. */ def pure[S, A](a: A): State[S, A] = ??? /** * A State whose value is the current state, which it leaves untouched: `s => (s, s)`. When nothing else fixes the * state type, give it at the call site: `State.get[Int]`. */ def get[S]: State[S, S] = ??? /** A State that replaces the state with `s` and gives `()`: whatever the old state, `((), s)`. */ def put[S](s: S): State[S, Unit] = ??? /** A State that replaces the state `s` with `f(s)` and gives `()`. */ def modify[S](f: S => S): State[S, Unit] = ???