/**
* ioState :: IO a -> State IO a
*
* @param M\IO $io
*
* @return M\State
*/
function ioState(M\IO $io)
{
return M\State::of(function ($state) use($io) {
list($key, $data) = $state;
$value = $io->run();
$data[$key] = $value;
$newState = [$key, $data];
return [$value, $newState];
});
}