# Generic methods

The following methods are common to all CSML primitive types.

### .type\_of()

Return the type of the target value (`string`, `array`, `object`, `float`, `boolean`, `int`, `null`)

```cpp
any_value.type_of() => String
```

### .to\_string()

Return the target value formatted as a string.

```cpp
any_value.to_string() => String
```

### .is\_number()

Check if a variable can be interpreted as a number (float or int)

```c
string.is_number() => boolean

// example
do var_int = "42"
say var_int.is_number() // true

do var_float = "42.42"
say var_int.is_number() // true

do obj = {"toto": "tutu"}
say obj.is_number() // false
```

### .is\_int()

Check if the variable can be interpreted as an int

```c
string.is_int() => boolean

// example
do var_int = "42"
say var_int.is_number() // true

do var_float = 42.42
say var_int.is_number() // false
```

### .is\_float()

Check if the variable can be interpreted as an float

```c
string.is_float() => boolean

// example
do var_int = 42
say var_int.is_number() // false

do var_float = 42.42
say var_int.is_number() // true
```

### .is\_error(), .get\_info()

Some functions may resolve to an error due to a faulty user input, an unreachable API, or some other bug in the code. You can check the result of such functions call (like `HTTP()` or `App())` with `.is_error()`, and get more information with `.get_info()`.

```c
  do x = HTTP("https://somewhere.com/does-not-exist").send()

  if (x.is_error()) {
    // get info a description of the error
    debug "{{x.get_info()}}"

    // try something else or ask again the user for input!
  }
```
