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