## Types

ZoKrates currently exposes three types:

### `field`

This is the most basic type in ZoKrates, and it represents a positive integer in `[0, p - 1]` where `p` is a (large) prime number.

The prime `p` is set to `21888242871839275222246405745257275088548364400416034343698204186575808495617` as imposed by the pairing curve supported by Ethereum.

While `field` values mostly behave like unsigned integers, one should keep in mind that they overflow at `p` and not some power of 2, so that we have:

``````def main() -> (field):
field pMinusOne = 21888242871839275222246405745257275088548364400416034343698204186575808495616
0 - 1 == pMinusOne
return 1
``````

### `bool`

ZoKrates has limited support for booleans, to the extent that they can only be used as the condition in `if ... else ... endif` expressions.

You can use them for equality checks, inequality checks and inequality checks between `field` values.

Note that while equality checks are cheap, inequality checks should be use wisely as they are orders of magnitude more expensive.

### `field[n]`

Static arrays of `field` can be instantiated with a constant size, and their elements can be accessed and updated:

``````def main() -> (field):
field[3] a = [1, 2, 3] // initialize an array with values
a[2] = 4               // set a member to a value
field[4] b = [42; 4]   // initialize an array of 4 values all equal to 42
field[4] c = [...a, 4] // initialize an array copying values from `a`, followed by 4
field[2] d = a[1..3]   // initialize an array copying a slice from `a`
return a[0] + b[1] + c[2]

``````