code: public function visitStringableType(StringableType $type)
      {
          $this->typeCheck->visitStringableType(func_get_args());
  
          $closure = new Closure;
          $closure->addParameter(new Parameter($this->valueIdentifier));
          $valueVariable = new Variable($this->valueIdentifier);
  
          $isStringCall = new Call(QualifiedIdentifier::fromString('\is_string'));
          $isStringCall->add($valueVariable);
          $isIntCall = new Call(QualifiedIdentifier::fromString('\is_int'));
          $isIntCall->add($valueVariable);
          $isFloatCall = new Call(QualifiedIdentifier::fromString('\is_float'));
          $isFloatCall->add($valueVariable);
          $stringablePrimitiveExpression = new LogicalOr(
              $isStringCall,
              $isIntCall
          );
          $stringablePrimitiveExpression->add($isFloatCall);
          $ifStatement = new IfStatement($stringablePrimitiveExpression);
          $ifStatement->trueBranch()->add(
              new ReturnStatement(new Literal(true))
          );
          $closure->statementBlock()->add($ifStatement);
  
          $isObjectCall = new Call(QualifiedIdentifier::fromString('\is_object'));
          $isObjectCall->add($valueVariable);
          $ifStatement = new IfStatement(new LogicalNot($isObjectCall));
          $ifStatement->trueBranch()->add(
              new ReturnStatement(new Literal(false))
          );
          $closure->statementBlock()->add($ifStatement);
  
          $newReflectorCall = new Call(QualifiedIdentifier::fromString('\ReflectionObject'));
          $newReflectorCall->add($valueVariable);
          $newReflector = new NewOperator($newReflectorCall);
          $reflectorVariable = new Variable(new Identifier('reflector'));
          $closure->statementBlock()->add(new ExpressionStatement(new Assign(
              $reflectorVariable,
              $newReflector
          )));
  
          $hasMethodCall = new Call(
              new Member(
                  $reflectorVariable,
                  new Constant(new Identifier('hasMethod'))
              )
          );
          $hasMethodCall->add(new Literal('__toString'));
          $closure->statementBlock()->add(new ReturnStatement($hasMethodCall));
  
          return $closure;
      }
docs: @param StringableType $type
  
  @return Closure