public function map(callable $function)
{
return self::of(function ($state) use($function) {
list($value, $newState) = $this->runState($state);
return [call_user_func($function, $value), $newState];
});
}