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