2019-06-11 05:37:12 +04:00
|
|
|
---
|
|
|
|
id: cheat-sheet
|
|
|
|
title: Cheat Sheet
|
|
|
|
---
|
2020-03-04 17:19:00 +04:00
|
|
|
|
|
|
|
import Syntax from '@theme/Syntax';
|
|
|
|
|
|
|
|
<div className="cheatsheet">
|
2019-06-21 16:45:52 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
<Syntax syntax="pascaligo">
|
2019-06-11 05:37:12 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="codeTable">
|
|
|
|
<div className="primitive">Strings</div>
|
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const name: string = "Tezos";
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Characters
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const t: string = "t";
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Integers
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const i: int = 42;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Natural numbers
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
const n: nat = 7n;
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Unit
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const u: unit = unit;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Boolean
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const hasDriversLicense: bool = False;
|
|
|
|
const adult: bool = True;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Boolean Logic
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
const booleanLogic: bool =
|
|
|
|
(not True) =
|
|
|
|
False =
|
|
|
|
(False and True) =
|
|
|
|
(False or False);
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Mutez (micro tez)
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
const tez: tez = 42tez;
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Address
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
const tz1address: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
|
|
|
|
const kt1address: address =
|
|
|
|
("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address);
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Addition
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const add_int: int = 3 + 4;
|
|
|
|
const add_nat: nat = 3n + 4n;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Multiplication & Division
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const mul_int: int = 3 + 4;
|
|
|
|
const mul_nat: nat = 3n + 4n;
|
|
|
|
|
|
|
|
const div_int: int = 10 / 5;
|
|
|
|
const div_nat: nat = 10n / 5n;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Modulo
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
const mod_nat: nat = 10 mod 3;
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
2020-03-18 19:53:59 +04:00
|
|
|
Tuples
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
|
|
|
```pascaligo
|
2020-03-20 00:27:58 +04:00
|
|
|
type name is (string * string);
|
|
|
|
|
|
|
|
const winner: name = ("John", "Doe");
|
|
|
|
|
|
|
|
const firstName: string = winner.0;
|
|
|
|
const lastName: string = winner.1;
|
2020-03-18 19:53:59 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="primitive">
|
|
|
|
Types
|
2020-03-18 19:53:59 +04:00
|
|
|
</div>
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
```pascaligo
|
|
|
|
type age is int;
|
|
|
|
type name is string
|
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Includes
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
2019-06-11 05:37:12 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
```#include "library.ligo"```
|
2020-03-18 19:53:59 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Functions (short form)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
2020-03-18 19:53:59 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
```pascaligo
|
|
|
|
function add (const a : int ; const b : int) : int is
|
|
|
|
a + b
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Functions (long form)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
function add (const a : int ; const b : int) : int is
|
|
|
|
block {
|
|
|
|
const result: int = a + b;
|
|
|
|
} with result
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
If Statement
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
function if_statement (const age : int) : int is
|
|
|
|
block {
|
|
|
|
var id: int := -1;
|
|
|
|
if age < 16 then {
|
|
|
|
failwith ("Too young to drive");
|
|
|
|
} else {
|
|
|
|
id := 1;
|
|
|
|
}
|
|
|
|
} with id
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Options
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
type middleName is option(string);
|
|
|
|
const middleName : middleName = Some("Foo");
|
|
|
|
const middleName : middleName = None;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Assignment
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const age: int = 5;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Assignment on an existing variable
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
:::caution
|
|
|
|
This feature is not supported at the top-level scope, you can use it e.g. within functions. Works for Records and Maps as well.
|
|
|
|
:::
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
function assignment_existing (const age : int) : int is
|
|
|
|
block {
|
|
|
|
var x : int := 2;
|
|
|
|
x := 3;
|
|
|
|
} with x
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Type Annotations
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
const someAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variants
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo group=variants
|
|
|
|
type action is
|
|
|
|
| Increment of int
|
|
|
|
| Decrement of int;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variant *(pattern)* matching
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo group=variants
|
|
|
|
function main
|
|
|
|
(const action : action; const input : int) : int is
|
|
|
|
(case action of
|
|
|
|
Increment (n) -> input + 1
|
|
|
|
| Decrement (n) -> input - 1
|
|
|
|
end)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Records
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
type person is record
|
|
|
|
age: int;
|
|
|
|
name: string;
|
|
|
|
end
|
|
|
|
|
|
|
|
const john : person = record
|
|
|
|
age = 18;
|
|
|
|
name = "john doe";
|
|
|
|
end
|
|
|
|
|
|
|
|
const name: string = john.name;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Maps
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
type prices is map(nat, tez);
|
|
|
|
|
|
|
|
const prices: prices = map
|
|
|
|
10n -> 60mutez;
|
|
|
|
50n -> 30mutez;
|
|
|
|
100n -> 10mutez;
|
|
|
|
end
|
|
|
|
|
|
|
|
const price: option(tez) = prices[50n];
|
|
|
|
|
|
|
|
function mutate (const u: unit) : unit is block {
|
|
|
|
prices[200n] := 10mutez;
|
|
|
|
} with unit;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Contracts & Accounts
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo group=tezos_specific
|
|
|
|
const destinationAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
|
|
|
|
|
|
|
|
const contract : contract (unit) = (
|
|
|
|
case (Tezos.get_contract_opt (Tezos.sender) : option(contract(unit))) of
|
|
|
|
Some (contract) -> contract
|
|
|
|
| None ->
|
|
|
|
(failwith ("No contract.")
|
|
|
|
: contract (unit))
|
|
|
|
end);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Transactions
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo group=tezos_specific
|
|
|
|
|
|
|
|
const payment: operation =
|
|
|
|
Tezos.transaction(unit, 100mutez, contract);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Exception/Failure
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```pascaligo
|
|
|
|
function fail (const u: unit) : unit is
|
|
|
|
failwith("a failure message")
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
2019-06-11 05:37:12 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="cameligo">
|
2019-12-12 22:07:13 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="codeTable">
|
|
|
|
<div className="primitive">Strings</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let name: string = "Tezos"
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Characters
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let t: string = "t"
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Integers
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let i: int = 42
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Natural numbers
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let n: nat = 7n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Unit
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let u: unit = unit
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Boolean
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let has_drivers_license: bool = false
|
|
|
|
let adult: bool = true
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Boolean Logic
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let booleanLogic: bool =
|
|
|
|
(not true) =
|
|
|
|
false =
|
|
|
|
(false && true) =
|
|
|
|
(false || false)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Mutez (micro tez)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let tez: tez = 42tez
|
|
|
|
let tez: tez = 7mutez
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Address
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let tz1address: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
let kt1address: address =
|
|
|
|
("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Addition
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let add_int: int = 3 + 4
|
|
|
|
let add_nat: nat = 3n + 4n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Multiplication & Division
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let mul_int: int = 3 + 4
|
|
|
|
let mul_nat: nat = 3n + 4n
|
|
|
|
|
|
|
|
let div_int: int = 10 / 5
|
|
|
|
let div_nat: nat = 10n / 5n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Modulo
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let mod_nat: nat = 10 mod 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Tuples
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
type name = (string * string)
|
|
|
|
|
|
|
|
let winner: name = "John", "Doe"
|
|
|
|
|
|
|
|
let firstName: string = winner.0
|
|
|
|
let lastName: string = winner.1
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Types
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
type age = int
|
|
|
|
type name = string
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Includes
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```#include "library.mligo"```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Functions
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let add (a : int) (b : int) : int =
|
|
|
|
a + b
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="primitive">
|
|
|
|
If Statement
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let if_statement (age : int) : int =
|
|
|
|
if age < 16 then
|
|
|
|
(failwith ("Too young to drive"): int)
|
|
|
|
else
|
|
|
|
1
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Options
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
type middle_name = string option
|
|
|
|
let middle_name : middle_name = Some "Foo"
|
|
|
|
let middle_name : middle_name = None
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variable Binding
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let age: int = 5
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Type Annotations
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let someAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variants
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo group=variants
|
|
|
|
type action =
|
|
|
|
| Increment of int
|
|
|
|
| Decrement of int
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variant *(pattern)* matching
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo group=variants
|
|
|
|
let a: action = Increment 5
|
|
|
|
let result: int = match a with
|
|
|
|
| Increment n -> n + 1
|
|
|
|
| Decrement n -> n - 1
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Records
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
type person = {
|
|
|
|
age: int;
|
|
|
|
name: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
let john : person = {
|
|
|
|
age = 18;
|
|
|
|
name = "john doe";
|
|
|
|
}
|
|
|
|
|
|
|
|
let name: string = john.name
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Maps
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
type prices = (nat, tez) map
|
|
|
|
|
|
|
|
let prices: prices = Map.literal [
|
|
|
|
(10n, 60mutez);
|
|
|
|
(50n, 30mutez);
|
|
|
|
(100n, 10mutez);
|
|
|
|
]
|
|
|
|
|
|
|
|
let price: tez option = Map.find_opt 50n prices
|
|
|
|
|
|
|
|
let prices : prices = Map.update 200n (Some 5mutez) prices
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Contracts & Accounts
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo group=tezos_specific
|
|
|
|
let destinationAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
|
|
|
|
let contract : unit contract =
|
|
|
|
match (Tezos.get_contract_opt Tezos.sender : unit contract option) with
|
|
|
|
Some contract -> contract
|
|
|
|
| None -> (failwith "no contract" : unit contract)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Transactions
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo group=tezos_specific
|
|
|
|
|
|
|
|
let payment: operation =
|
|
|
|
Tezos.transaction unit 100mutez contract
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Exception/Failure
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```cameligo
|
|
|
|
let fail (u: unit) : unit =
|
|
|
|
failwith "a failure message"
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
2019-12-12 22:07:13 +04:00
|
|
|
|
2020-03-04 17:19:00 +04:00
|
|
|
</Syntax>
|
|
|
|
<Syntax syntax="reasonligo">
|
2020-01-28 20:36:55 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
<div className="codeTable">
|
|
|
|
<div className="primitive">Strings</div>
|
|
|
|
<div className="example">
|
2019-12-12 22:07:13 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
```reasonligo
|
|
|
|
let name: string = "Tezos"
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Characters
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let t: string = "t"
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Integers
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let i: int = 42
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Natural numbers
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let n: nat = 7n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Unit
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let u: unit = unit
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Boolean
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let has_drivers_license: bool = false
|
|
|
|
let adult: bool = true
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Boolean Logic
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let booleanLogic: bool =
|
|
|
|
(!true) ==
|
|
|
|
false ==
|
|
|
|
(false && true) ==
|
|
|
|
(false || false)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Mutez (micro tez)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let tez: tez = 42tez
|
|
|
|
let tez: tez = 7mutez
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Address
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let tz1address: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
let kt1address: address =
|
|
|
|
("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Addition
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let add_int: int = 3 + 4
|
|
|
|
let add_nat: nat = 3n + 4n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Multiplication & Division
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let mul_int: int = 3 + 4
|
|
|
|
let mul_nat: nat = 3n + 4n
|
|
|
|
|
|
|
|
let div_int: int = 10 / 5
|
|
|
|
let div_nat: nat = 10n / 5n
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Modulo
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let mod_nat: nat = 10 mod 3
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Tuples
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
type name = (string, string)
|
|
|
|
|
|
|
|
let winner: name = ("John", "Doe")
|
|
|
|
|
|
|
|
let firstName: string = winner[0]
|
|
|
|
let lastName: string = winner[1]
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Types
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
type age = int
|
|
|
|
type name = string
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Includes
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```#include "library.religo"```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Functions (short form)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let add = (a: int, b: int): int =>
|
|
|
|
a + b
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Functions (long form)
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let add = (a: int, b: int): int => {
|
|
|
|
let c = a;
|
|
|
|
let d = b;
|
|
|
|
c + d
|
|
|
|
};
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
If Statement
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let if_statement = (age : int) : int =>
|
|
|
|
if (age < 16) {
|
|
|
|
(failwith ("Too young to drive"): int)
|
|
|
|
} else {
|
|
|
|
1
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Options
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
type middle_name = option(string);
|
|
|
|
let middle_name : middle_name = Some ("Foo");
|
|
|
|
let middle_name : middle_name = None;
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variable Binding
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let age: int = 5
|
|
|
|
```
|
2020-03-04 17:19:00 +04:00
|
|
|
|
2020-03-20 00:27:58 +04:00
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Type Annotations
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let someAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variants
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo group=variants
|
|
|
|
type action =
|
|
|
|
| Increment (int)
|
|
|
|
| Decrement (int)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Variant *(pattern)* matching
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo group=variants
|
|
|
|
let a: action = Increment(5)
|
|
|
|
let result: int = switch (a) {
|
|
|
|
| Increment(n) => n + 1
|
|
|
|
| Decrement(n) => n - 1
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Records
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
type person = {
|
|
|
|
age: int,
|
|
|
|
name: string
|
|
|
|
}
|
|
|
|
|
|
|
|
let john : person = {
|
|
|
|
age: 18,
|
|
|
|
name: "john doe"
|
|
|
|
}
|
|
|
|
|
|
|
|
let name: string = john.name
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Maps
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
type prices = map (nat, tez)
|
|
|
|
|
|
|
|
let prices: prices = Map.literal ([
|
|
|
|
(10n, 60mutez),
|
|
|
|
(50n, 30mutez),
|
|
|
|
(100n, 10mutez),
|
|
|
|
])
|
|
|
|
|
|
|
|
let price: option(tez) = Map.find_opt(50n, prices)
|
|
|
|
|
|
|
|
let prices : prices = Map.update(200n, (Some 5mutez), prices)
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Contracts & Accounts
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo group=tezos_specific
|
|
|
|
let destinationAddress: address =
|
|
|
|
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
|
|
|
|
|
|
|
|
let contract : contract(unit) =
|
|
|
|
switch (Tezos.get_contract_opt(Tezos.sender) : option(contract(unit))) {
|
|
|
|
| Some(contract) => contract
|
|
|
|
| None => (failwith("no contract") : contract(unit))
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Transactions
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo group=tezos_specific
|
|
|
|
|
|
|
|
let payment: operation =
|
|
|
|
Tezos.transaction(unit, 100mutez, contract);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className="primitive">
|
|
|
|
Exception/Failure
|
|
|
|
</div>
|
|
|
|
<div className="example">
|
|
|
|
|
|
|
|
```reasonligo
|
|
|
|
let fail = (u: unit) : unit =>
|
|
|
|
failwith("a failure message")
|
|
|
|
```
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</Syntax>
|
2019-10-27 20:50:24 +04:00
|
|
|
|
2019-06-11 05:37:12 +04:00
|
|
|
|
2019-10-27 20:50:24 +04:00
|
|
|
</div>
|