/**
  * @param Generic\TypeConstraint $constraint
  *
  * @return Result\ValidationResult
  */
 public function visitTypeConstraint(Generic\TypeConstraint $constraint)
 {
     $value = $this->currentValue();
     $isValid = false;
     foreach ($constraint->valueTypes() as $valueType) {
         if ($valueType === Value\ValueType::ARRAY_TYPE()) {
             $isValid = $value instanceof Value\ArrayValue;
         } elseif ($valueType === Value\ValueType::BOOLEAN_TYPE()) {
             $isValid = $value instanceof Value\BooleanValue;
         } elseif ($valueType === Value\ValueType::DATE_TIME_TYPE()) {
             $isValid = $value instanceof Value\DateTimeValue;
         } elseif ($valueType === Value\ValueType::INTEGER_TYPE()) {
             $isValid = $value instanceof Value\IntegerValue;
         } elseif ($valueType === Value\ValueType::NULL_TYPE()) {
             $isValid = $value instanceof Value\NullValue;
         } elseif ($valueType === Value\ValueType::NUMBER_TYPE()) {
             $isValid = $value instanceof Value\NumberValueInterface;
         } elseif ($valueType === Value\ValueType::OBJECT_TYPE()) {
             $isValid = $value instanceof Value\ObjectValue;
         } elseif ($valueType === Value\ValueType::STRING_TYPE()) {
             $isValid = $value instanceof Value\StringValue;
         }
         if ($isValid) {
             return $this->createResult();
         }
     }
     return $this->createSingleIssueResult($constraint);
 }