/** * 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]; }); }
/** * tryCatch :: Exception e => IO a -> (e -> IO a) -> IO a * * @param M\IO $io * @param callable $catchFunction * * @return M\IO */ function tryCatch(M\IO $io = null, callable $catchFunction = null) { return call_user_func_array(f\curryN(2, function (M\IO $io, callable $catchFunction) { return M\IO::of(function () use($io, $catchFunction) { try { return $io->run(); } catch (\Exception $e) { return call_user_func($catchFunction, $e); } }); }), func_get_args()); }
public function provideFunctorTestData() { return ['IO' => ['$f' => function ($x) { return $x + 1; }, '$g' => function ($x) { return $x + 5; }, '$x' => IO::of(function () { return 1; })]]; }
/** * getEnv :: String -> IO String * * @param string $name * * @throws IOError * * @return M\IO */ function getEnv($name) { return M\IO::of(function () use($name) { $value = \getenv($name); if (false === $value) { throw userError(sprintf('Environment variable "%s" does not exists.', $name)); } return $value; }); }