State
у кошек фактически определяется как псевдоним типа для преобразователя монад StateT[F[_], S, A]
, где F[_]
- тип эффекта. Этот псевдоним исправляет F[_]
с Eval
, поэтому выглядит как type State[S, A] = StateT[Eval, S, A]
. В вашем случае вы должны просто определить свое собственное состояние ввода-вывода, например type IOState[S, A] = StateT[IO, S, A]
.
StateT[IO, S, A]
соответствует IO[S => IO[(S, A)]]
, и я чувствую, что это более полезный стек, потому что теперь вы можете легко соединить код, используя этот стек, с остальной частью вашего приложения, используя IO.
Вы можете найти больше информации о монаде состояния стека с монадой эффектов с StateT
в разделе эффектов чередования в документации State от кошек.