From 4efb34bd728732101432843ed0bfbeb971272287 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Thu, 21 Dec 2023 14:03:41 +0000 Subject: Add chapters --- .../lesson00_hello_world/code.gleam | 5 +++++ .../chapter0_basics/lesson00_hello_world/text.html | 26 ++++++++++++++++++++++ .../chapter0_basics/lesson01_basics/code.gleam | 7 ++++++ .../chapter0_basics/lesson01_basics/text.html | 17 ++++++++++++++ .../lesson02_unqualified_imports/code.gleam | 10 +++++++++ .../lesson02_unqualified_imports/text.html | 15 +++++++++++++ .../lesson03_type_checking/code.gleam | 7 ++++++ .../lesson03_type_checking/text.html | 19 ++++++++++++++++ .../chapter0_basics/lesson04_ints/code.gleam | 25 +++++++++++++++++++++ .../chapter0_basics/lesson04_ints/text.html | 17 ++++++++++++++ .../chapter0_basics/lesson05_floats/code.gleam | 24 ++++++++++++++++++++ .../chapter0_basics/lesson05_floats/text.html | 19 ++++++++++++++++ .../lesson06_number_formats/code.gleam | 16 +++++++++++++ .../lesson06_number_formats/text.html | 13 +++++++++++ .../chapter0_basics/lesson07_strings/code.gleam | 20 +++++++++++++++++ .../chapter0_basics/lesson07_strings/text.html | 23 +++++++++++++++++++ .../chapter0_basics/lesson08_bools/code.gleam | 14 ++++++++++++ .../chapter0_basics/lesson08_bools/text.html | 17 ++++++++++++++ .../lesson09_assignments/code.gleam | 17 ++++++++++++++ .../chapter0_basics/lesson09_assignments/text.html | 8 +++++++ .../lesson10_discard_patterns/code.gleam | 4 ++++ .../lesson10_discard_patterns/text.html | 10 +++++++++ .../lesson11_type_annotations/code.gleam | 7 ++++++ .../lesson11_type_annotations/text.html | 15 +++++++++++++ .../chapter0_basics/lesson12_blocks/code.gleam | 13 +++++++++++ .../chapter0_basics/lesson12_blocks/text.html | 23 +++++++++++++++++++ .../chapter0_basics/lesson13_lists/code.gleam | 16 +++++++++++++ .../chapter0_basics/lesson13_lists/text.html | 19 ++++++++++++++++ .../lesson14_list_functions/code.gleam | 15 +++++++++++++ .../lesson14_list_functions/text.html | 25 +++++++++++++++++++++ 30 files changed, 466 insertions(+) create mode 100644 src/content/chapter0_basics/lesson00_hello_world/code.gleam create mode 100644 src/content/chapter0_basics/lesson00_hello_world/text.html create mode 100644 src/content/chapter0_basics/lesson01_basics/code.gleam create mode 100644 src/content/chapter0_basics/lesson01_basics/text.html create mode 100644 src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam create mode 100644 src/content/chapter0_basics/lesson02_unqualified_imports/text.html create mode 100644 src/content/chapter0_basics/lesson03_type_checking/code.gleam create mode 100644 src/content/chapter0_basics/lesson03_type_checking/text.html create mode 100644 src/content/chapter0_basics/lesson04_ints/code.gleam create mode 100644 src/content/chapter0_basics/lesson04_ints/text.html create mode 100644 src/content/chapter0_basics/lesson05_floats/code.gleam create mode 100644 src/content/chapter0_basics/lesson05_floats/text.html create mode 100644 src/content/chapter0_basics/lesson06_number_formats/code.gleam create mode 100644 src/content/chapter0_basics/lesson06_number_formats/text.html create mode 100644 src/content/chapter0_basics/lesson07_strings/code.gleam create mode 100644 src/content/chapter0_basics/lesson07_strings/text.html create mode 100644 src/content/chapter0_basics/lesson08_bools/code.gleam create mode 100644 src/content/chapter0_basics/lesson08_bools/text.html create mode 100644 src/content/chapter0_basics/lesson09_assignments/code.gleam create mode 100644 src/content/chapter0_basics/lesson09_assignments/text.html create mode 100644 src/content/chapter0_basics/lesson10_discard_patterns/code.gleam create mode 100644 src/content/chapter0_basics/lesson10_discard_patterns/text.html create mode 100644 src/content/chapter0_basics/lesson11_type_annotations/code.gleam create mode 100644 src/content/chapter0_basics/lesson11_type_annotations/text.html create mode 100644 src/content/chapter0_basics/lesson12_blocks/code.gleam create mode 100644 src/content/chapter0_basics/lesson12_blocks/text.html create mode 100644 src/content/chapter0_basics/lesson13_lists/code.gleam create mode 100644 src/content/chapter0_basics/lesson13_lists/text.html create mode 100644 src/content/chapter0_basics/lesson14_list_functions/code.gleam create mode 100644 src/content/chapter0_basics/lesson14_list_functions/text.html (limited to 'src/content/chapter0_basics') diff --git a/src/content/chapter0_basics/lesson00_hello_world/code.gleam b/src/content/chapter0_basics/lesson00_hello_world/code.gleam new file mode 100644 index 0000000..30530b2 --- /dev/null +++ b/src/content/chapter0_basics/lesson00_hello_world/code.gleam @@ -0,0 +1,5 @@ +import gleam/io + +pub fn main() { + io.println("Hello, Joe!") +} diff --git a/src/content/chapter0_basics/lesson00_hello_world/text.html b/src/content/chapter0_basics/lesson00_hello_world/text.html new file mode 100644 index 0000000..cb41be9 --- /dev/null +++ b/src/content/chapter0_basics/lesson00_hello_world/text.html @@ -0,0 +1,26 @@ +

Hello, friend ๐Ÿ’ซ

+

+ Welcome to Try Gleam! An interactive tour of the Gleam programming language. +

+

+ It covers all aspects of the Gleam language, and assuming you have some + prior programming experience should teach you everything you need to write + real programs in Gleam. +

+

+ The tour is interactive! The code shown is editable and will be compiled and + evaluated as you type. Anything you print using io.println or + io.debug will be shown in the bottom section, along with any + compile errors and warnings. To evaluate Gleam code the tour compiles Gleam to + JavaScript and runs it, all entirely within your browser window. +

+

+ If at any point you get stuck or have a question do not hesitate to ask in + the Gleam Discord server. We're here + to help, and if you find something confusing then it's likely others will too, + and we want to know about it so we can improve the tour. +

+

+ OK, let's go. Click "Next" to get started, or click "Index" to jump to a + specific topic. +

diff --git a/src/content/chapter0_basics/lesson01_basics/code.gleam b/src/content/chapter0_basics/lesson01_basics/code.gleam new file mode 100644 index 0000000..67cc6b4 --- /dev/null +++ b/src/content/chapter0_basics/lesson01_basics/code.gleam @@ -0,0 +1,7 @@ +// Import a Gleam module from the standard library +import gleam/io + +pub fn main() { + // Print to the console + io.println("Hello, Joe!") +} diff --git a/src/content/chapter0_basics/lesson01_basics/text.html b/src/content/chapter0_basics/lesson01_basics/text.html new file mode 100644 index 0000000..8e2033a --- /dev/null +++ b/src/content/chapter0_basics/lesson01_basics/text.html @@ -0,0 +1,17 @@ +

+ Here is a program that prints out the text "Hello, Joe!". +

+

+ It does this by using the `println` function which has been imported from the + gleam/io + module, which is part of the Gleam standard library. +

+

+ In a normal Gleam program this program would be run use the command + gleam run on the command line, but here in this tutorial the + program is automatically compiled and run as the code is edited. +

+

+ Try changing the text being printed to Hello, Mike! and see what + happens. +

diff --git a/src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam b/src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam new file mode 100644 index 0000000..2708f25 --- /dev/null +++ b/src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam @@ -0,0 +1,10 @@ +// Import the module and one of its functions +import gleam/io.{println} + +pub fn main() { + // Use the function in a qualified fashion + io.println("This is qualified") + + // Or an unqualified fashion + println("This is unqualified") +} diff --git a/src/content/chapter0_basics/lesson02_unqualified_imports/text.html b/src/content/chapter0_basics/lesson02_unqualified_imports/text.html new file mode 100644 index 0000000..8fda45e --- /dev/null +++ b/src/content/chapter0_basics/lesson02_unqualified_imports/text.html @@ -0,0 +1,15 @@ +

+ Normally functions from other modules are used in a qualified fashion, with + the module qualifier before function name. For example, + io.println("Hello!"). +

+

+ It is also possible to specify a list of functions to import from a module in + an unqualified fashion, such as the println function in the code + editor. Because it has been imported like this it can be referred to as just + println. +

+

+ Generally it is best to use qualified imports, as this makes it clear where + the function is defined, making the code easier to read. +

diff --git a/src/content/chapter0_basics/lesson03_type_checking/code.gleam b/src/content/chapter0_basics/lesson03_type_checking/code.gleam new file mode 100644 index 0000000..e068f31 --- /dev/null +++ b/src/content/chapter0_basics/lesson03_type_checking/code.gleam @@ -0,0 +1,7 @@ +import gleam/io + +pub fn main() { + io.println("My lucky number is:") + // io.println(4) + // ๐Ÿ‘†๏ธ Uncomment this line +} diff --git a/src/content/chapter0_basics/lesson03_type_checking/text.html b/src/content/chapter0_basics/lesson03_type_checking/text.html new file mode 100644 index 0000000..fadfe64 --- /dev/null +++ b/src/content/chapter0_basics/lesson03_type_checking/text.html @@ -0,0 +1,19 @@ +

+ Gleam has a robust static type system that is help you as you write and edit + code, catching mistakes and showing you where to make changes. +

+

+ Uncomment the line io.println(4) and see how a compile time error + is reported as the io.println function only works with strings, + not ints. +

+

+ To fix the code change the code to call the io.debug + function instead, as it will print a value of any type. +

+

+ Gleam has no null, no implicit conversions, no exceptions, and + always performs full type checking. If the code compiles you can be reasonably + confident it does not have any inconsistencies that may cause bugs or + crashes. +

diff --git a/src/content/chapter0_basics/lesson04_ints/code.gleam b/src/content/chapter0_basics/lesson04_ints/code.gleam new file mode 100644 index 0000000..cb7991b --- /dev/null +++ b/src/content/chapter0_basics/lesson04_ints/code.gleam @@ -0,0 +1,25 @@ +import gleam/io +import gleam/int + +pub fn main() { + // Int arithmetic + io.debug(1 + 1) + io.debug(5 - 1) + io.debug(5 / 2) + io.debug(3 * 3) + io.debug(5 % 2) + + // Int comparisons + io.debug(2 > 1) + io.debug(2 < 1) + io.debug(2 >= 1) + io.debug(2 <= 1) + + // Equality works for any type + io.debug(1 == 1) + io.debug(2 == 1) + + // Standard library int functions + io.debug(int.max(42, 77)) + io.debug(int.clamp(5, 10, 20)) +} diff --git a/src/content/chapter0_basics/lesson04_ints/text.html b/src/content/chapter0_basics/lesson04_ints/text.html new file mode 100644 index 0000000..252496a --- /dev/null +++ b/src/content/chapter0_basics/lesson04_ints/text.html @@ -0,0 +1,17 @@ +

Gleam's Int type represents whole numbers.

+

+ There are arithmetic and comparison operators for ints, as well as the + equality operator which works on all types. +

+

+ When running on the Erlang virtual machine ints have no maximum and minimum + size. When running on JavaScript runtimes ints are represented using + JavaScript's 64 bit floating point numbers, +

+

+ The + gleam/int + standard library module contains functions for working with ints. +

diff --git a/src/content/chapter0_basics/lesson05_floats/code.gleam b/src/content/chapter0_basics/lesson05_floats/code.gleam new file mode 100644 index 0000000..8c4e89a --- /dev/null +++ b/src/content/chapter0_basics/lesson05_floats/code.gleam @@ -0,0 +1,24 @@ +import gleam/io +import gleam/float + +pub fn main() { + // Float arithmetic + io.debug(1.0 +. 1.5) + io.debug(5.0 -. 1.5) + io.debug(5.0 /. 2.5) + io.debug(3.0 *. 3.5) + + // Float comparisons + io.debug(2.2 >. 1.3) + io.debug(2.2 <. 1.3) + io.debug(2.2 >=. 1.3) + io.debug(2.2 <=. 1.3) + + // Equality works for any type + io.debug(1.1 == 1.1) + io.debug(2.1 == 1.2) + + // Standard library float functions + io.debug(float.max(2.0, 9.5)) + io.debug(float.ceiling(5.4)) +} diff --git a/src/content/chapter0_basics/lesson05_floats/text.html b/src/content/chapter0_basics/lesson05_floats/text.html new file mode 100644 index 0000000..497bb13 --- /dev/null +++ b/src/content/chapter0_basics/lesson05_floats/text.html @@ -0,0 +1,19 @@ +

+ Gleam's Float type represents numbers that are not integers. +

+

+ Unlike many languages Gleam does not have a `NaN` or `Infinity` float value. +

+

+ Gleam's numerical operators are not overloaded, so there are dedictated + operators for working with floats. +

+

+ Floats are represented as 64 bit floating point numbers on both Erlang and + JavaScript runtimes. +

+

+ The gleam/float + standard library module contains functions for working with floats. +

+ diff --git a/src/content/chapter0_basics/lesson06_number_formats/code.gleam b/src/content/chapter0_basics/lesson06_number_formats/code.gleam new file mode 100644 index 0000000..7307185 --- /dev/null +++ b/src/content/chapter0_basics/lesson06_number_formats/code.gleam @@ -0,0 +1,16 @@ +import gleam/io + +pub fn main() { + // Underscores + io.debug(1_000_000) + io.debug(10_000.01) + + // Binary, octal, and hex Int literals + io.debug(0b00001111) + io.debug(0o17) + io.debug(0xF) + + // Scientific notation Float literals + io.debug(7.0e7) + io.debug(3.0e-4) +} diff --git a/src/content/chapter0_basics/lesson06_number_formats/text.html b/src/content/chapter0_basics/lesson06_number_formats/text.html new file mode 100644 index 0000000..308219a --- /dev/null +++ b/src/content/chapter0_basics/lesson06_number_formats/text.html @@ -0,0 +1,13 @@ +

+ Underscores can be added to numbers for clarity. For example, + 1000000 can be tricky to read quickly, while + 1_000_000 can be easier. +

+

+ Ints can be written in binary, octal, or hexadecimal formats using the + 0b, 0o, and 0x prefixes respectively. +

+

+ Floats can be written in a scientific notation. +

+ diff --git a/src/content/chapter0_basics/lesson07_strings/code.gleam b/src/content/chapter0_basics/lesson07_strings/code.gleam new file mode 100644 index 0000000..c77163e --- /dev/null +++ b/src/content/chapter0_basics/lesson07_strings/code.gleam @@ -0,0 +1,20 @@ +import gleam/io +import gleam/string + +pub fn main() { + // String literals + io.debug("๐Ÿ‘ฉโ€๐Ÿ’ป ใ“ใ‚“ใซใกใฏ Gleam ๐Ÿณ๏ธโ€๐ŸŒˆ") + io.debug( + "multi + line + string", + ) + io.debug("\u{1F600}") + + // String concatenation + io.debug("One " <> "Two") + + // String functions + io.debug(string.reverse("1 2 3 4 5")) + io.debug(string.append("abc", "def")) +} diff --git a/src/content/chapter0_basics/lesson07_strings/text.html b/src/content/chapter0_basics/lesson07_strings/text.html new file mode 100644 index 0000000..820f1b3 --- /dev/null +++ b/src/content/chapter0_basics/lesson07_strings/text.html @@ -0,0 +1,23 @@ +

+ In Gleam Strings are written as text surrounded by double quotes, and + can span multiple lines and contain unicode characters. +

+

+ The <> operator can be used to concatenate strings. +

+

+ Several escape sequences are supported: +

+ +

+ The gleam/string + standard library module contains functions for working with strings. +

diff --git a/src/content/chapter0_basics/lesson08_bools/code.gleam b/src/content/chapter0_basics/lesson08_bools/code.gleam new file mode 100644 index 0000000..e5c1d98 --- /dev/null +++ b/src/content/chapter0_basics/lesson08_bools/code.gleam @@ -0,0 +1,14 @@ +import gleam/io +import gleam/bool + +pub fn main() { + // Bool operators + io.debug(True && False) + io.debug(True && True) + io.debug(False || False) + io.debug(False || True) + + // Bool functions + io.debug(bool.to_string(True)) + io.debug(bool.to_int(False)) +} diff --git a/src/content/chapter0_basics/lesson08_bools/text.html b/src/content/chapter0_basics/lesson08_bools/text.html new file mode 100644 index 0000000..3f60743 --- /dev/null +++ b/src/content/chapter0_basics/lesson08_bools/text.html @@ -0,0 +1,17 @@ +

+ A Bool is a either True or False. +

+

+ The ||, &&, and ! operators can be used + to manipulate bools. +

+

+ The || and && operators are short-circuiting, + meaning that if the left hand side of the operator is True for + || or False for && then the right hand + side of the operator will not be evaluated. +

+

+ The gleam/bool + standard library module contains functions for working with bools. +

diff --git a/src/content/chapter0_basics/lesson09_assignments/code.gleam b/src/content/chapter0_basics/lesson09_assignments/code.gleam new file mode 100644 index 0000000..a030e43 --- /dev/null +++ b/src/content/chapter0_basics/lesson09_assignments/code.gleam @@ -0,0 +1,17 @@ +import gleam/io + +pub fn main() { + let x = "Original" + io.debug(x) + + // Assign `y` to the value of `x` + let y = x + io.debug(y) + + // Assign `x` to a new value + let x = "New" + io.debug(x) + + // The `y` still refers to the original value + io.debug(y) +} diff --git a/src/content/chapter0_basics/lesson09_assignments/text.html b/src/content/chapter0_basics/lesson09_assignments/text.html new file mode 100644 index 0000000..6d535de --- /dev/null +++ b/src/content/chapter0_basics/lesson09_assignments/text.html @@ -0,0 +1,8 @@ +

+ A value can be assigned to a variable using let. +

+

+ Variable names can be reused by later let bindings, but the values they + reference are immutable, so the values themselves are not changed or mutated + in any way. +

diff --git a/src/content/chapter0_basics/lesson10_discard_patterns/code.gleam b/src/content/chapter0_basics/lesson10_discard_patterns/code.gleam new file mode 100644 index 0000000..fa2c0e3 --- /dev/null +++ b/src/content/chapter0_basics/lesson10_discard_patterns/code.gleam @@ -0,0 +1,4 @@ +pub fn main() { + // This variable is never used + let _score = 1000 +} diff --git a/src/content/chapter0_basics/lesson10_discard_patterns/text.html b/src/content/chapter0_basics/lesson10_discard_patterns/text.html new file mode 100644 index 0000000..46dc79b --- /dev/null +++ b/src/content/chapter0_basics/lesson10_discard_patterns/text.html @@ -0,0 +1,10 @@ +

+ If a variable is assigned but not used then Gleam will emit a warning. +

+

+ If a variable is intended not to be use then the name can be prefixed with an + underscore, silencing the warning. +

+

+ Try changing the variable name to score to see the warning. +

diff --git a/src/content/chapter0_basics/lesson11_type_annotations/code.gleam b/src/content/chapter0_basics/lesson11_type_annotations/code.gleam new file mode 100644 index 0000000..1299c2f --- /dev/null +++ b/src/content/chapter0_basics/lesson11_type_annotations/code.gleam @@ -0,0 +1,7 @@ +pub fn main() { + let _name: String = "Gleam" + + let _is_cool: Bool = True + + let _version: Int = 1 +} diff --git a/src/content/chapter0_basics/lesson11_type_annotations/text.html b/src/content/chapter0_basics/lesson11_type_annotations/text.html new file mode 100644 index 0000000..8738a15 --- /dev/null +++ b/src/content/chapter0_basics/lesson11_type_annotations/text.html @@ -0,0 +1,15 @@ +

+ Let assignments can be written with a type annotation after the name. +

+

+ Type annotations may be useful for documentation purposes, but they do not + change how Gleam type checks the code beyond ensuring that the annotation is + correct. +

+

+ Typically Gleam code will not have type annotations for assignments. +

+

+ Try changing a type annotation to something incorrect to see the compile + error. +

diff --git a/src/content/chapter0_basics/lesson12_blocks/code.gleam b/src/content/chapter0_basics/lesson12_blocks/code.gleam new file mode 100644 index 0000000..31e4729 --- /dev/null +++ b/src/content/chapter0_basics/lesson12_blocks/code.gleam @@ -0,0 +1,13 @@ +import gleam/io + +pub fn main() { + let fahrenheit = { + let degrees = 64 + degrees + } + // io.debug(degrees) // <- This will not compile + + // Changing order of evaluation + let celsius = { fahrenheit - 32 } * 5 / 9 + io.debug(celsius) +} diff --git a/src/content/chapter0_basics/lesson12_blocks/text.html b/src/content/chapter0_basics/lesson12_blocks/text.html new file mode 100644 index 0000000..bc82e39 --- /dev/null +++ b/src/content/chapter0_basics/lesson12_blocks/text.html @@ -0,0 +1,23 @@ +

+ Blocks are one or more expressions grouped together with curly braces. Each + expression is evaluated in order and the value of the last expression is + returned. +

+

+ Any variables assigned within the block can only be used within the block. +

+

+ Try uncommenting io.debug(degrees) to see the compile error from + trying to use a variable that is not in scope. +

+

+ Blocks can also be used to change the order of evaluation of binary operators + expressions. +

+

+ * binds more tightly than + so the expression + 1 + 2 * 3 evaluates to 7. If the 1 + 2 should be + evaluated first to make the expression evaluate to 9 then the expression can be + wrapped in a block: { 1 + 2 } * 3. This is similar to grouping + with parentheses in some other languages. +

diff --git a/src/content/chapter0_basics/lesson13_lists/code.gleam b/src/content/chapter0_basics/lesson13_lists/code.gleam new file mode 100644 index 0000000..646ad6e --- /dev/null +++ b/src/content/chapter0_basics/lesson13_lists/code.gleam @@ -0,0 +1,16 @@ +import gleam/io + +pub fn main() { + let ints = [1, 2, 3] + + io.debug(ints) + + // Immutably prepend + io.debug([-1, 0, ..ints]) + + // Uncomment this to see the error + // io.debug(["zero", ..ints]) + + // The original lists are unchanged + io.debug(ints) +} diff --git a/src/content/chapter0_basics/lesson13_lists/text.html b/src/content/chapter0_basics/lesson13_lists/text.html new file mode 100644 index 0000000..dd07cd7 --- /dev/null +++ b/src/content/chapter0_basics/lesson13_lists/text.html @@ -0,0 +1,19 @@ +

+ Lists are ordered collections of values. +

+

+ List is a generic type, having a type parameter + for the type of values it contains. A list of ints has the type + List(Int), and a list of strings has the type + List(String). +

+

+ Lists are immutable single-linked lists, meaning they are very efficient to + add and remove elements from the front of the list. +

+

+ Counting the length of a list or getting elements from other positions in the + list is expensive and rarely done. It is rare to write algorithms that index + into sequences in Gleam, but but when they are written a list is not the right + choice of data structure. +

diff --git a/src/content/chapter0_basics/lesson14_list_functions/code.gleam b/src/content/chapter0_basics/lesson14_list_functions/code.gleam new file mode 100644 index 0000000..92d1cc6 --- /dev/null +++ b/src/content/chapter0_basics/lesson14_list_functions/code.gleam @@ -0,0 +1,15 @@ +import gleam/io +import gleam/list + +pub fn main() { + let ints = [0, 1, 2, 3, 4, 5] + + let doubled = list.map(ints, fn(x) { x * 2 }) + io.debug(doubled) + + let even = list.filter(ints, fn(x) { x % 2 == 0 }) + io.debug(even) + + let total = list.fold(ints, 0, fn(count, e) { count + e }) + io.debug(total) +} diff --git a/src/content/chapter0_basics/lesson14_list_functions/text.html b/src/content/chapter0_basics/lesson14_list_functions/text.html new file mode 100644 index 0000000..e143654 --- /dev/null +++ b/src/content/chapter0_basics/lesson14_list_functions/text.html @@ -0,0 +1,25 @@ +

+ The gleam/list + standard library module contains functions for working with lists. A Gleam + program will likely make heavy use of this module. +

+ +

+ map + makes a new list by running a function on each element in a list. +

+

+ filter + makes a new list containing only the elements for which a function returns + true. +

+

+ fold + combines all the elements in a list into a single value by running a function + left-to-right on each element, passing the result of the previous call to the + next call. +

+

+ It's worth getting familiar with all the functions in this module when writing + Gleam code. +

-- cgit v1.2.3