diff --git a/gitlab-pages/docker-compose.yml b/gitlab-pages/docker-compose.yml
index af12b7af7..8f9e490b8 100644
--- a/gitlab-pages/docker-compose.yml
+++ b/gitlab-pages/docker-compose.yml
@@ -17,7 +17,7 @@ services:
# - ./website/versioned_docs:/app/website/versioned_docs
- ./website/sidebars.json:/app/website/sidebars.json
- ./website/docusaurus.config.js:/app/website/docusaurus.config.js
- - ./website/versions.json:/app/website/versions.json
+ # - ./website/versions.json:/app/website/versions.json
# - ./website/core/AlgoliaSearch.js:/app/website/core/AlgoliaSearch.js
working_dir: /app/website
diff --git a/gitlab-pages/docs/reference/big_map.md b/gitlab-pages/docs/reference/big_map.md
index 952275c1c..956752427 100644
--- a/gitlab-pages/docs/reference/big_map.md
+++ b/gitlab-pages/docs/reference/big_map.md
@@ -1,25 +1,36 @@
---
id: big-map-reference
-title: Big Maps — Scalable Maps
+title: Big_map
+description: A lazily deserialized map that's intended to store large amounts of data.
+hide_table_of_contents: true
---
import Syntax from '@theme/Syntax';
+import SyntaxTitle from '@theme/SyntaxTitle';
-Ordinary maps are fine for contracts with a finite lifespan or a
-bounded number of users. For many contracts however, the intention is
-to have a map holding *many* entries, potentially millions of
-them. The cost of loading those entries into the environment each time
-a user executes the contract would eventually become too expensive
-were it not for *big maps*. Big maps are a data structure offered by
-Michelson which handles the scaling concerns for us. In LIGO, the
-interface for big maps is analogous to the one used for ordinary maps.
+A lazily deserialized map that's intended to store large amounts of data.
-# Declaring a Map
+The gast costs of deserialized maps are higher than standard maps as data is lazily deserialized.
+
+type big_map (key, value)
+
+
+
+
+type ('key, 'value) big_map
+
+
+type big_map ('key, 'value)
+
+
-```pascaligo group=big_maps
+The type of a big map from values of type `key` to
+values of type `value` is `big_map (key, value)`.
+
+```pascaligo group=big_map
type move is int * int
type register is big_map (address, move)
```
@@ -27,67 +38,101 @@ type register is big_map (address, move)
-```cameligo group=big_maps
+The type of a big map from values of type `key` to values
+of type `value` is `(key, value) big_map`.
+
+```cameligo group=big_map
type move = int * int
type register = (address, move) big_map
```
+The type of a big map from values of type `key` to
+values of type `value` is `big_map (key, value)`.
-```reasonligo group=big_maps
+```reasonligo group=big_map
type move = (int, int);
type register = big_map (address, move);
```
+
+function empty : big_map (key, value)
+
+
+val empty : ('key, 'value) big_map
+
+
+let empty: big_map ('key, 'value)
+
-
-# Creating an Empty Big Map
-
-
+Create an empty big_map.
-```pascaligo group=big_maps
-const empty : register = big_map []
+```pascaligo group=big_map
+const empty : register = Big_map.empty
+```
+
+Alternatively, you can also create an empty big_map using:
+
+```pascaligo group=big_map
+const empty_alternative : register = big_map []
```
-```cameligo group=big_maps
+```cameligo group=big_map
let empty : register = Big_map.empty
```
-```reasonligo group=big_maps
+```reasonligo group=big_map
let empty : register = Big_map.empty
```
-# Creating a Non-empty Map
-
+
+function literal : list (key * value) -> big_map (key, value)
+
+
+val literal : ('key * 'value) list -> ('key, 'value) big_map
+
+
+let literal: list(('key, 'value)) => big_map('key, 'value)
+
+Create a non-empty big_map.
-```pascaligo group=big_maps
+```pascaligo group=big_map
const moves : register =
+ Big_map.literal (list [
+ (("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address), (1,2));
+ (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), (0,3))]);
+```
+
+Alternative way of creating an empty big_map:
+
+```pascaligo group=big_map
+const moves_alternative : register =
big_map [
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address) -> (1,2);
- ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) -> (0,3)]
+ ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) -> (0,3)];
```
-```cameligo group=big_maps
+```cameligo group=big_map
let moves : register =
Big_map.literal [
(("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address), (1,2));
@@ -97,7 +142,7 @@ let moves : register =
-```reasonligo group=big_maps
+```reasonligo group=big_map
let moves : register =
Big_map.literal ([
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address, (1,2)),
@@ -106,21 +151,40 @@ let moves : register =
+
+function find_opt : key -> big_map (key, value) -> option value
+
+
+val find_opt : 'key -> ('key, 'value) big_map -> 'value option
+
+
+let find_opt : ('key, big_map ('key, 'value)) => option ('value)
+
-# Accessing Values
+Retrieve a value from a big map with the given key.
+
+Because the key may be missing in the big map, the result is an
+*optional value*.
-```pascaligo group=big_maps
+```pascaligo group=big_map
const my_balance : option (move) =
- moves [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address)]
+ Big_map.find_opt (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), moves)
+```
+
+Alternatively:
+
+```pascaligo group=big_map
+const my_balance_alternative : option (move) =
+ moves [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address)];
```
-```cameligo group=big_maps
+```cameligo group=big_map
let my_balance : move option =
Big_map.find_opt ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) moves
```
@@ -128,33 +192,62 @@ let my_balance : move option =
-```reasonligo group=big_maps
+```reasonligo group=big_map
let my_balance : option (move) =
Big_map.find_opt ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address, moves);
```
+
+function update : key -> option value -> big_map (key, value) -> big_map (key, value)
+
+
+val update: 'key -> 'value option -> ('key, 'value) big_map -> ('key, 'value) big_map
+
+
+let update: ('key, option('value), big_map ('key, 'value)) => big_map ('key, 'value)
+
-
-# Updating Big Maps
-
+Note: when `None` is used as a value, the value is removed from the big_map.
-```pascaligo group=big_maps
-function add (var m : register) : register is
- block {
- m [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)] := (4,9)
- } with m
-
-const updated_map : register = add (moves)
+```pascaligo group=big_map
+ const updated_big_map : register = Big_map.update(("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), Some (4,9), moves);
```
+Alternatively:
+
+```pascaligo group=big_map
+
+function update (var m : register) : register is
+ block {
+ m [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)] := (4,9);
+ } with m
+
+```
+
+If multiple bindings need to be updated, PascaLIGO offers a *patch
+instruction* for maps, similar to that for records.
+
+```pascaligo group=big_map
+function assignments (var m : register) : register is
+ block {
+ patch m with map [
+ ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) -> (4,9);
+ ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address) -> (1,2)
+ ]
+ } with m
+```
+
+> Note the use of the keyword `map` instead of `big_map` (which is not
+> a keyword).
+
-```cameligo group=big_maps
+```cameligo group=big_map
let updated_map : register =
Big_map.update
("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) (Some (4,9)) moves
@@ -163,7 +256,7 @@ let updated_map : register =
-```reasonligo group=big_maps
+```reasonligo group=big_map
let updated_map : register =
Big_map.update
(("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), Some ((4,9)), moves);
@@ -171,14 +264,64 @@ let updated_map : register =
+
+function add : key -> value -> big_map (key, value) -> big_map (key, value)
+
+
+val add : 'key -> 'value -> ('key, 'value) big_map -> ('key, 'value) big_map
+
+
+let add: ('key, 'value, big_map('key, 'value)) => big_map('key, 'value)
+
+
-# Removing Bindings
+```pascaligo group=big_map
+const added_item : register = Big_map.add (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), (4, 9), moves)
+```
+
+
+
+
+```cameligo group=big_map
+let add (m : register) : register =
+ Big_map.add
+ ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) (4,9) m
+```
+
+
+
+
+```reasonligo group=big_map
+let add = (m: register): register =>
+ Big_map.add
+ (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), (4,9), m);
+```
+
+
+
+function remove: key -> big_map (key, value) -> big_map (key, value)
+
+
+val remove: 'key -> ('key, 'value) big_map -> ('key, 'value) big_map
+
+
+let remove: (key, big_map ('key, 'value)) => big_map ('key, 'value)
+
-```pascaligo group=big_maps
+```pascaligo group=big_map
+ const updated_map : register =
+ Big_map.remove (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), moves)
+```
+
+Alternatively, the instruction `remove key from map m` removes the key
+`key` from the big map `m` (note that the keyword is `map`, not
+`big_map`).
+
+```pascaligo group=big_map
function rem (var m : register) : register is
block {
remove ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) from map moves
@@ -190,17 +333,17 @@ const updated_map : register = rem (moves)
-```cameligo group=big_maps
+```cameligo group=big_map
let updated_map : register =
- Map.remove ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves
+ Big_map.remove ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves
```
-```reasonligo group=big_maps
+```reasonligo group=big_map
let updated_map : register =
- Map.remove (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), moves)
+ Big_map.remove (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), moves)
```
diff --git a/gitlab-pages/website/docusaurus.config.js b/gitlab-pages/website/docusaurus.config.js
index 5fd7c6ddd..9cab1f4ea 100644
--- a/gitlab-pages/website/docusaurus.config.js
+++ b/gitlab-pages/website/docusaurus.config.js
@@ -99,7 +99,6 @@ const siteConfig = {
},*/
// Add custom scripts here that would be placed in