Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

opt

opt is a type that represents an optional value: every Option is either Some and contains a value, or None, and does not.

<span class='hljs-keyword'>type</span> t = <span class='hljs-keyword'>fn</span> <span class='hljs-type'>T</span> <span class='hljs-keyword'>=&gt;</span> <span class='hljs-title function_'>Some</span> <span class='hljs-keyword'>of</span> <span class='hljs-type'>T</span> | <span class='hljs-title function_'>None</span>

Functions


Some: '0 -> (opt::t '0)

Constructor for a Some option.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> my_some = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>Some</span> <span class='hljs-punctuation'>(</span><span class='hljs-variable constant_'>12</span><span class='hljs-punctuation'>)</span>
# <span class='hljs-keyword'>end</span>

None: (opt::t '0)

Constructor for a None option.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> my_none = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>None</span> <span class='hljs-punctuation'>(</span><span class='hljs-punctuation'>)</span>
# <span class='hljs-keyword'>end</span>

is_some: (opt::t '0) -> boolean

Returns true if the passed option is Some, otherwise returns false.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> value = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>Some</span> <span class='hljs-punctuation'>(</span><span class='hljs-variable constant_'>12</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>is_some</span> 
    <span class='hljs-comment'>(* value is true *)</span>
# <span class='hljs-keyword'>end</span>

is_none: (opt::t '0) -> std:boolean

Returns true if the passed option is None, otherwise false.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> value = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>None</span> <span class='hljs-punctuation'>(</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>is_none</span> 
    <span class='hljs-comment'>(* value is true *)</span>
# <span class='hljs-keyword'>end</span>

unwrap: (opt::t '0) -> '0

If the passed option is a Some, returns the enclosed value, otherwise panics.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> value = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>Some</span> <span class='hljs-punctuation'>(</span><span class='hljs-variable constant_'>12</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>unwrap</span>
    <span class='hljs-comment'>(* value == 12 *)</span>
    <span class='hljs-keyword'>let</span> other_value = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>None</span> <span class='hljs-punctuation'>(</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>unwrap</span>
    <span class='hljs-comment'>(* panics *)</span>
# <span class='hljs-keyword'>end</span>

map: ('0 -> '1) -> (opt::t '0) -> (opt::t '1)

If the passed option is a Some, returns a copy of the passed option with the passed function applied to its value. Otherwise, returns None.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> my_opt = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>Some</span> <span class='hljs-punctuation'>(</span><span class='hljs-variable constant_'>2</span><span class='hljs-punctuation'>)</span>
    <span class='hljs-keyword'>let</span> <span class='hljs-punctuation'>(</span><span class='hljs-punctuation'>)</span> = my_opt <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>map</span> <span class='hljs-punctuation'>(</span><span class='hljs-keyword'>fn</span> <span class='hljs-params'>a</span> <span class='hljs-keyword'>=&gt;</span> a <span class='hljs-operator'>*</span> <span class='hljs-variable constant_'>2</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>unwrap</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>string</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>from_integer</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>std</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>print_string</span>
    <span class='hljs-comment'>(* prints 4 *)</span> 
# <span class='hljs-keyword'>end</span>

iterate: ('0 -> '1) -> (opt::t '0) -> ()

If the passed option is a Some, runs passed function on the passed option, then returns unit. Otherwise, returns unit.

Example

# <span class='hljs-keyword'>module</span> demo = 
    <span class='hljs-keyword'>let</span> <span class='hljs-punctuation'>(</span><span class='hljs-punctuation'>)</span> = <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>Some</span> <span class='hljs-punctuation'>(</span><span class='hljs-string'>"Teto"</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|&gt;</span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>iterate</span> <span class='hljs-title class_'>std</span><span class='hljs-punctuation'>::</span>print_string
    <span class='hljs-comment'>(* prints "Teto" *)</span>
# <span class='hljs-keyword'>end</span>