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]; }); }