---
id: toplevel
title: Top-Level
description: Available functions at the top level
hide_table_of_contents: true
---
import Syntax from '@theme/Syntax';
import SyntaxTitle from '@theme/SyntaxTitle';
These functions are available without any needed prefix.
function is_nat: int -> option(nat)
val is_nat: int -> nat option
let is_nat: int => option(nat)
Convert an `int` to a `nat` if possible.
Note that `Michelson.is_nat` is deprecated. Please use `is_nat` instead.
function abs: int -> nat
val abs: int -> nat
let abs: int => nat
Cast an `int` to `nat`.
function int: nat -> int
val int: nat -> int
let int: nat => int
Cast an `nat` to `int`.
const unit: unit
val unit: unit
let (): unit
A helper to create a unit.
function failwith : 'a -> unit
val failwith : 'a -> unit
let failwith: 'a => unit
Cause the contract to fail with an error message or integer. Other types are
not supported at the moment.
Using this currently requires in general a type annotation on the
`failwith` call.
```pascaligo
function main (const p : int; const s : unit) : list (operation) * unit is
block {
if p > 10 then failwith ("Failure.") else skip
}
with ((nil : list (operation)), s)
```
```cameligo
let main (p,s : int * unit) = if p > 10 then failwith "Failure."
```
```reasonligo
let main = ((p,s) : (int, unit)) =>
if (p > 10) { failwith ("Failure."); };
```
`Current.failwith` is deprecated. Use `Tezos.failwith` or `failwith` instead.
`Current.failwith` is deprecated. Use `Tezos.failwith` or `failwith` instead.
function assert : bool -> unit
val assert : bool -> unit
let assert: bool => unit
Check if a certain condition has been met. If not the contract will fail.
function ediv : int -> int -> option (int * nat)
function ediv : mutez -> nat -> option (mutez * mutez)
function ediv : mutez -> mutez -> option (nat * mutez)
function ediv : nat -> nat -> option (nat * nat)
val ediv : int -> int -> (int * nat) option
val ediv : mutez -> nat -> (mutez * mutez) option
val ediv : mutez -> mutez -> (nat * mutez) option
val ediv : nat -> nat -> (nat * nat) option
let ediv: (int, int) => option((int, nat))
let ediv: (mutez, nat) => option((mutez, mutez))
let ediv: (mutez, mutez) => option((nat, mutez))
let ediv: (nat, nat) => option((nat, nat))
Compiles to Michelson `EDIV`, one operation to get both the quotient and remainder of a division. `ediv x y` returns None if `y` is zero, otherwise returns `Some (quotient, remainder)` such that `x = (quotient * y) + remainder` and `0 <= remainder < abs(y)`.