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'>=></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'>|></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'>|></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'>|></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'>|></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'>|></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'>=></span> a <span class='hljs-operator'>*</span> <span class='hljs-variable constant_'>2</span><span class='hljs-punctuation'>)</span> <span class='hljs-operator'>|></span> <span class='hljs-title class_'>opt</span><span class='hljs-punctuation'>::</span><span class='hljs-title function_'>unwrap</span> <span class='hljs-operator'>|></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'>|></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'>|></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>