aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lessons/README.md22
-rw-r--r--lessons/gleam.toml9
-rw-r--r--lessons/manifest.toml11
-rw-r--r--lessons/test/lessons_test.gleam12
-rw-r--r--src/content/chapter0_basics/lesson00_hello_world/code.gleam (renamed from lessons/src/lesson000_hello_world/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson00_hello_world/text.html (renamed from lessons/src/lesson000_hello_world/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson01_basics/code.gleam (renamed from lessons/src/lesson001_basics/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson01_basics/text.html (renamed from lessons/src/lesson001_basics/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam (renamed from lessons/src/lesson002_unqualified_imports/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson02_unqualified_imports/text.html (renamed from lessons/src/lesson002_unqualified_imports/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson03_type_checking/code.gleam (renamed from lessons/src/lesson003_type_checking/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson03_type_checking/text.html (renamed from lessons/src/lesson003_type_checking/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson04_ints/code.gleam (renamed from lessons/src/lesson004_ints/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson04_ints/text.html (renamed from lessons/src/lesson004_ints/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson05_floats/code.gleam (renamed from lessons/src/lesson005_floats/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson05_floats/text.html (renamed from lessons/src/lesson005_floats/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson06_number_formats/code.gleam (renamed from lessons/src/lesson006_number_formats/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson06_number_formats/text.html (renamed from lessons/src/lesson006_number_formats/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson07_strings/code.gleam (renamed from lessons/src/lesson007_strings/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson07_strings/text.html (renamed from lessons/src/lesson007_strings/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson08_bools/code.gleam (renamed from lessons/src/lesson008_bools/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson08_bools/text.html (renamed from lessons/src/lesson008_bools/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson09_assignments/code.gleam (renamed from lessons/src/lesson009_assignments/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson09_assignments/text.html (renamed from lessons/src/lesson009_assignments/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson10_discard_patterns/code.gleam (renamed from lessons/src/lesson010_discard_patterns/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson10_discard_patterns/text.html (renamed from lessons/src/lesson010_discard_patterns/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson11_type_annotations/code.gleam (renamed from lessons/src/lesson011_type_annotations/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson11_type_annotations/text.html (renamed from lessons/src/lesson011_type_annotations/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson12_blocks/code.gleam (renamed from lessons/src/lesson012_blocks/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson12_blocks/text.html (renamed from lessons/src/lesson012_blocks/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson13_lists/code.gleam (renamed from lessons/src/lesson020_lists/code.gleam)0
-rw-r--r--src/content/chapter0_basics/lesson13_lists/text.html (renamed from lessons/src/lesson020_lists/text.html)0
-rw-r--r--src/content/chapter0_basics/lesson14_list_functions/code.gleam (renamed from lessons/src/lesson021_list_functions/code.gleam)2
-rw-r--r--src/content/chapter0_basics/lesson14_list_functions/text.html (renamed from lessons/src/lesson021_list_functions/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson00_functions/code.gleam (renamed from lessons/src/lesson013_functions/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson00_functions/text.html (renamed from lessons/src/lesson013_functions/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson01_higher_order_functions/code.gleam (renamed from lessons/src/lesson014_higher_order_functions/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson01_higher_order_functions/text.html (renamed from lessons/src/lesson014_higher_order_functions/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson02_anonymous_functions/code.gleam (renamed from lessons/src/lesson015_anonymous_functions/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson02_anonymous_functions/text.html (renamed from lessons/src/lesson015_anonymous_functions/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson03_function_captures/code.gleam (renamed from lessons/src/lesson016_function_captures/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson03_function_captures/text.html (renamed from lessons/src/lesson016_function_captures/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson04_generic_functions/code.gleam (renamed from lessons/src/lesson017_generic_functions/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson04_generic_functions/text.html (renamed from lessons/src/lesson017_generic_functions/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson05_pipelines/code.gleam (renamed from lessons/src/lesson018_pipelines/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson05_pipelines/text.html (renamed from lessons/src/lesson018_pipelines/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson06_labelled_arguments/code.gleam (renamed from lessons/src/lesson019_labelled_arguments/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson06_labelled_arguments/text.html (renamed from lessons/src/lesson019_labelled_arguments/text.html)0
-rw-r--r--src/content/chapter1_functions/lesson099_documentation_comments/code.gleam (renamed from lessons/src/lesson099_documentation_comments/code.gleam)0
-rw-r--r--src/content/chapter1_functions/lesson099_documentation_comments/text.html (renamed from lessons/src/lesson099_documentation_comments/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson01_case_expressions/code.gleam (renamed from lessons/src/lesson022_case_expressions/code.gleam)2
-rw-r--r--src/content/chapter2_flow_control/lesson01_case_expressions/text.html (renamed from lessons/src/lesson022_case_expressions/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson02_variable_patterns/code.gleam (renamed from lessons/src/lesson023_variable_patterns/code.gleam)2
-rw-r--r--src/content/chapter2_flow_control/lesson02_variable_patterns/text.html (renamed from lessons/src/lesson023_variable_patterns/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson03_string_patterns/code.gleam (renamed from lessons/src/lesson024_string_patterns/code.gleam)0
-rw-r--r--src/content/chapter2_flow_control/lesson03_string_patterns/text.html (renamed from lessons/src/lesson024_string_patterns/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson04_list_patterns/code.gleam (renamed from lessons/src/lesson025_list_patterns/code.gleam)2
-rw-r--r--src/content/chapter2_flow_control/lesson04_list_patterns/text.html (renamed from lessons/src/lesson025_list_patterns/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson05_list_recursion/code.gleam (renamed from lessons/src/lesson026_list_recursion/code.gleam)0
-rw-r--r--src/content/chapter2_flow_control/lesson05_list_recursion/text.html (renamed from lessons/src/lesson026_list_recursion/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson06_multiple_subjects/code.gleam (renamed from lessons/src/lesson027_multiple_subjects/code.gleam)0
-rw-r--r--src/content/chapter2_flow_control/lesson06_multiple_subjects/text.html (renamed from lessons/src/lesson027_multiple_subjects/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson07_alternative_patterns/code.gleam (renamed from lessons/src/lesson028_alternative_patterns/code.gleam)0
-rw-r--r--src/content/chapter2_flow_control/lesson07_alternative_patterns/text.html (renamed from lessons/src/lesson028_alternative_patterns/text.html)0
-rw-r--r--src/content/chapter2_flow_control/lesson08_pattern_aliases/code.gleam (renamed from lessons/src/lesson029_pattern_aliases/code.gleam)0
-rw-r--r--src/content/chapter2_flow_control/lesson08_pattern_aliases/text.html (renamed from lessons/src/lesson029_pattern_aliases/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson00_tuples/code.gleam (renamed from lessons/src/lesson030_tuples/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson00_tuples/text.html (renamed from lessons/src/lesson030_tuples/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson01_custom_types/code.gleam (renamed from lessons/src/lesson031_custom_types/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson01_custom_types/text.html (renamed from lessons/src/lesson031_custom_types/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson02_records/code.gleam (renamed from lessons/src/lesson032_records/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson02_records/text.html (renamed from lessons/src/lesson032_records/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson03_record_accessors/code.gleam (renamed from lessons/src/lesson033_record_accessors/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson03_record_accessors/text.html (renamed from lessons/src/lesson033_record_accessors/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson04_record_updates/code.gleam (renamed from lessons/src/lesson034_record_updates/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson04_record_updates/text.html (renamed from lessons/src/lesson034_record_updates/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson05_nil/code.gleam (renamed from lessons/src/lesson035_nil/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson05_nil/text.html (renamed from lessons/src/lesson035_nil/text.html)0
-rw-r--r--src/content/chapter3_data_types/lesson06_bit_arrays/code.gleam (renamed from lessons/src/lesson036_bit_arrays/code.gleam)0
-rw-r--r--src/content/chapter3_data_types/lesson06_bit_arrays/text.html (renamed from lessons/src/lesson036_bit_arrays/text.html)0
-rw-r--r--src/try_gleam.gleam238
-rw-r--r--static/style.css4
82 files changed, 157 insertions, 147 deletions
diff --git a/lessons/README.md b/lessons/README.md
deleted file mode 100644
index 01cefea..0000000
--- a/lessons/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# lessons
-
-[![Package Version](https://img.shields.io/hexpm/v/lessons)](https://hex.pm/packages/lessons)
-[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/lessons/)
-
-## Quick start
-
-```sh
-gleam run # Run the project
-gleam test # Run the tests
-gleam shell # Run an Erlang shell
-```
-
-## Installation
-
-If available on Hex this package can be added to your Gleam project:
-
-```sh
-gleam add lessons
-```
-
-and its documentation can be found at <https://hexdocs.pm/lessons>.
diff --git a/lessons/gleam.toml b/lessons/gleam.toml
deleted file mode 100644
index 6eb67c6..0000000
--- a/lessons/gleam.toml
+++ /dev/null
@@ -1,9 +0,0 @@
-name = "lessons"
-version = "1.0.0"
-target = "javascript"
-
-[dependencies]
-gleam_stdlib = "~> 0.32"
-
-[dev-dependencies]
-gleeunit = "~> 1.0"
diff --git a/lessons/manifest.toml b/lessons/manifest.toml
deleted file mode 100644
index e1aa028..0000000
--- a/lessons/manifest.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-# This file was generated by Gleam
-# You typically do not need to edit this file
-
-packages = [
- { name = "gleam_stdlib", version = "0.34.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1FB8454D2991E9B4C0C804544D8A9AD0F6184725E20D63C3155F0AEB4230B016" },
- { name = "gleeunit", version = "1.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "D364C87AFEB26BDB4FB8A5ABDE67D635DC9FA52D6AB68416044C35B096C6882D" },
-]
-
-[requirements]
-gleam_stdlib = { version = "~> 0.32" }
-gleeunit = { version = "~> 1.0" }
diff --git a/lessons/test/lessons_test.gleam b/lessons/test/lessons_test.gleam
deleted file mode 100644
index 3831e7a..0000000
--- a/lessons/test/lessons_test.gleam
+++ /dev/null
@@ -1,12 +0,0 @@
-import gleeunit
-import gleeunit/should
-
-pub fn main() {
- gleeunit.main()
-}
-
-// gleeunit test functions end in `_test`
-pub fn hello_world_test() {
- 1
- |> should.equal(1)
-}
diff --git a/lessons/src/lesson000_hello_world/code.gleam b/src/content/chapter0_basics/lesson00_hello_world/code.gleam
index 30530b2..30530b2 100644
--- a/lessons/src/lesson000_hello_world/code.gleam
+++ b/src/content/chapter0_basics/lesson00_hello_world/code.gleam
diff --git a/lessons/src/lesson000_hello_world/text.html b/src/content/chapter0_basics/lesson00_hello_world/text.html
index cb41be9..cb41be9 100644
--- a/lessons/src/lesson000_hello_world/text.html
+++ b/src/content/chapter0_basics/lesson00_hello_world/text.html
diff --git a/lessons/src/lesson001_basics/code.gleam b/src/content/chapter0_basics/lesson01_basics/code.gleam
index 67cc6b4..67cc6b4 100644
--- a/lessons/src/lesson001_basics/code.gleam
+++ b/src/content/chapter0_basics/lesson01_basics/code.gleam
diff --git a/lessons/src/lesson001_basics/text.html b/src/content/chapter0_basics/lesson01_basics/text.html
index 8e2033a..8e2033a 100644
--- a/lessons/src/lesson001_basics/text.html
+++ b/src/content/chapter0_basics/lesson01_basics/text.html
diff --git a/lessons/src/lesson002_unqualified_imports/code.gleam b/src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam
index 2708f25..2708f25 100644
--- a/lessons/src/lesson002_unqualified_imports/code.gleam
+++ b/src/content/chapter0_basics/lesson02_unqualified_imports/code.gleam
diff --git a/lessons/src/lesson002_unqualified_imports/text.html b/src/content/chapter0_basics/lesson02_unqualified_imports/text.html
index 8fda45e..8fda45e 100644
--- a/lessons/src/lesson002_unqualified_imports/text.html
+++ b/src/content/chapter0_basics/lesson02_unqualified_imports/text.html
diff --git a/lessons/src/lesson003_type_checking/code.gleam b/src/content/chapter0_basics/lesson03_type_checking/code.gleam
index e068f31..e068f31 100644
--- a/lessons/src/lesson003_type_checking/code.gleam
+++ b/src/content/chapter0_basics/lesson03_type_checking/code.gleam
diff --git a/lessons/src/lesson003_type_checking/text.html b/src/content/chapter0_basics/lesson03_type_checking/text.html
index fadfe64..fadfe64 100644
--- a/lessons/src/lesson003_type_checking/text.html
+++ b/src/content/chapter0_basics/lesson03_type_checking/text.html
diff --git a/lessons/src/lesson004_ints/code.gleam b/src/content/chapter0_basics/lesson04_ints/code.gleam
index cb7991b..cb7991b 100644
--- a/lessons/src/lesson004_ints/code.gleam
+++ b/src/content/chapter0_basics/lesson04_ints/code.gleam
diff --git a/lessons/src/lesson004_ints/text.html b/src/content/chapter0_basics/lesson04_ints/text.html
index 252496a..252496a 100644
--- a/lessons/src/lesson004_ints/text.html
+++ b/src/content/chapter0_basics/lesson04_ints/text.html
diff --git a/lessons/src/lesson005_floats/code.gleam b/src/content/chapter0_basics/lesson05_floats/code.gleam
index 8c4e89a..8c4e89a 100644
--- a/lessons/src/lesson005_floats/code.gleam
+++ b/src/content/chapter0_basics/lesson05_floats/code.gleam
diff --git a/lessons/src/lesson005_floats/text.html b/src/content/chapter0_basics/lesson05_floats/text.html
index 497bb13..497bb13 100644
--- a/lessons/src/lesson005_floats/text.html
+++ b/src/content/chapter0_basics/lesson05_floats/text.html
diff --git a/lessons/src/lesson006_number_formats/code.gleam b/src/content/chapter0_basics/lesson06_number_formats/code.gleam
index 7307185..7307185 100644
--- a/lessons/src/lesson006_number_formats/code.gleam
+++ b/src/content/chapter0_basics/lesson06_number_formats/code.gleam
diff --git a/lessons/src/lesson006_number_formats/text.html b/src/content/chapter0_basics/lesson06_number_formats/text.html
index 308219a..308219a 100644
--- a/lessons/src/lesson006_number_formats/text.html
+++ b/src/content/chapter0_basics/lesson06_number_formats/text.html
diff --git a/lessons/src/lesson007_strings/code.gleam b/src/content/chapter0_basics/lesson07_strings/code.gleam
index c77163e..c77163e 100644
--- a/lessons/src/lesson007_strings/code.gleam
+++ b/src/content/chapter0_basics/lesson07_strings/code.gleam
diff --git a/lessons/src/lesson007_strings/text.html b/src/content/chapter0_basics/lesson07_strings/text.html
index 820f1b3..820f1b3 100644
--- a/lessons/src/lesson007_strings/text.html
+++ b/src/content/chapter0_basics/lesson07_strings/text.html
diff --git a/lessons/src/lesson008_bools/code.gleam b/src/content/chapter0_basics/lesson08_bools/code.gleam
index e5c1d98..e5c1d98 100644
--- a/lessons/src/lesson008_bools/code.gleam
+++ b/src/content/chapter0_basics/lesson08_bools/code.gleam
diff --git a/lessons/src/lesson008_bools/text.html b/src/content/chapter0_basics/lesson08_bools/text.html
index 3f60743..3f60743 100644
--- a/lessons/src/lesson008_bools/text.html
+++ b/src/content/chapter0_basics/lesson08_bools/text.html
diff --git a/lessons/src/lesson009_assignments/code.gleam b/src/content/chapter0_basics/lesson09_assignments/code.gleam
index a030e43..a030e43 100644
--- a/lessons/src/lesson009_assignments/code.gleam
+++ b/src/content/chapter0_basics/lesson09_assignments/code.gleam
diff --git a/lessons/src/lesson009_assignments/text.html b/src/content/chapter0_basics/lesson09_assignments/text.html
index 6d535de..6d535de 100644
--- a/lessons/src/lesson009_assignments/text.html
+++ b/src/content/chapter0_basics/lesson09_assignments/text.html
diff --git a/lessons/src/lesson010_discard_patterns/code.gleam b/src/content/chapter0_basics/lesson10_discard_patterns/code.gleam
index fa2c0e3..fa2c0e3 100644
--- a/lessons/src/lesson010_discard_patterns/code.gleam
+++ b/src/content/chapter0_basics/lesson10_discard_patterns/code.gleam
diff --git a/lessons/src/lesson010_discard_patterns/text.html b/src/content/chapter0_basics/lesson10_discard_patterns/text.html
index 46dc79b..46dc79b 100644
--- a/lessons/src/lesson010_discard_patterns/text.html
+++ b/src/content/chapter0_basics/lesson10_discard_patterns/text.html
diff --git a/lessons/src/lesson011_type_annotations/code.gleam b/src/content/chapter0_basics/lesson11_type_annotations/code.gleam
index 1299c2f..1299c2f 100644
--- a/lessons/src/lesson011_type_annotations/code.gleam
+++ b/src/content/chapter0_basics/lesson11_type_annotations/code.gleam
diff --git a/lessons/src/lesson011_type_annotations/text.html b/src/content/chapter0_basics/lesson11_type_annotations/text.html
index 8738a15..8738a15 100644
--- a/lessons/src/lesson011_type_annotations/text.html
+++ b/src/content/chapter0_basics/lesson11_type_annotations/text.html
diff --git a/lessons/src/lesson012_blocks/code.gleam b/src/content/chapter0_basics/lesson12_blocks/code.gleam
index 31e4729..31e4729 100644
--- a/lessons/src/lesson012_blocks/code.gleam
+++ b/src/content/chapter0_basics/lesson12_blocks/code.gleam
diff --git a/lessons/src/lesson012_blocks/text.html b/src/content/chapter0_basics/lesson12_blocks/text.html
index bc82e39..bc82e39 100644
--- a/lessons/src/lesson012_blocks/text.html
+++ b/src/content/chapter0_basics/lesson12_blocks/text.html
diff --git a/lessons/src/lesson020_lists/code.gleam b/src/content/chapter0_basics/lesson13_lists/code.gleam
index 646ad6e..646ad6e 100644
--- a/lessons/src/lesson020_lists/code.gleam
+++ b/src/content/chapter0_basics/lesson13_lists/code.gleam
diff --git a/lessons/src/lesson020_lists/text.html b/src/content/chapter0_basics/lesson13_lists/text.html
index dd07cd7..dd07cd7 100644
--- a/lessons/src/lesson020_lists/text.html
+++ b/src/content/chapter0_basics/lesson13_lists/text.html
diff --git a/lessons/src/lesson021_list_functions/code.gleam b/src/content/chapter0_basics/lesson14_list_functions/code.gleam
index 8cd4ced..92d1cc6 100644
--- a/lessons/src/lesson021_list_functions/code.gleam
+++ b/src/content/chapter0_basics/lesson14_list_functions/code.gleam
@@ -10,6 +10,6 @@ pub fn main() {
let even = list.filter(ints, fn(x) { x % 2 == 0 })
io.debug(even)
- let total = list.fold(ints, from: 0, with: fn(count, e) { count + e })
+ let total = list.fold(ints, 0, fn(count, e) { count + e })
io.debug(total)
}
diff --git a/lessons/src/lesson021_list_functions/text.html b/src/content/chapter0_basics/lesson14_list_functions/text.html
index e143654..e143654 100644
--- a/lessons/src/lesson021_list_functions/text.html
+++ b/src/content/chapter0_basics/lesson14_list_functions/text.html
diff --git a/lessons/src/lesson013_functions/code.gleam b/src/content/chapter1_functions/lesson00_functions/code.gleam
index 220e58d..220e58d 100644
--- a/lessons/src/lesson013_functions/code.gleam
+++ b/src/content/chapter1_functions/lesson00_functions/code.gleam
diff --git a/lessons/src/lesson013_functions/text.html b/src/content/chapter1_functions/lesson00_functions/text.html
index 32d5bed..32d5bed 100644
--- a/lessons/src/lesson013_functions/text.html
+++ b/src/content/chapter1_functions/lesson00_functions/text.html
diff --git a/lessons/src/lesson014_higher_order_functions/code.gleam b/src/content/chapter1_functions/lesson01_higher_order_functions/code.gleam
index e3fb3e7..e3fb3e7 100644
--- a/lessons/src/lesson014_higher_order_functions/code.gleam
+++ b/src/content/chapter1_functions/lesson01_higher_order_functions/code.gleam
diff --git a/lessons/src/lesson014_higher_order_functions/text.html b/src/content/chapter1_functions/lesson01_higher_order_functions/text.html
index 3343e4d..3343e4d 100644
--- a/lessons/src/lesson014_higher_order_functions/text.html
+++ b/src/content/chapter1_functions/lesson01_higher_order_functions/text.html
diff --git a/lessons/src/lesson015_anonymous_functions/code.gleam b/src/content/chapter1_functions/lesson02_anonymous_functions/code.gleam
index 2b037e0..2b037e0 100644
--- a/lessons/src/lesson015_anonymous_functions/code.gleam
+++ b/src/content/chapter1_functions/lesson02_anonymous_functions/code.gleam
diff --git a/lessons/src/lesson015_anonymous_functions/text.html b/src/content/chapter1_functions/lesson02_anonymous_functions/text.html
index f7bea3f..f7bea3f 100644
--- a/lessons/src/lesson015_anonymous_functions/text.html
+++ b/src/content/chapter1_functions/lesson02_anonymous_functions/text.html
diff --git a/lessons/src/lesson016_function_captures/code.gleam b/src/content/chapter1_functions/lesson03_function_captures/code.gleam
index 35f3412..35f3412 100644
--- a/lessons/src/lesson016_function_captures/code.gleam
+++ b/src/content/chapter1_functions/lesson03_function_captures/code.gleam
diff --git a/lessons/src/lesson016_function_captures/text.html b/src/content/chapter1_functions/lesson03_function_captures/text.html
index afa87a3..afa87a3 100644
--- a/lessons/src/lesson016_function_captures/text.html
+++ b/src/content/chapter1_functions/lesson03_function_captures/text.html
diff --git a/lessons/src/lesson017_generic_functions/code.gleam b/src/content/chapter1_functions/lesson04_generic_functions/code.gleam
index e232bf8..e232bf8 100644
--- a/lessons/src/lesson017_generic_functions/code.gleam
+++ b/src/content/chapter1_functions/lesson04_generic_functions/code.gleam
diff --git a/lessons/src/lesson017_generic_functions/text.html b/src/content/chapter1_functions/lesson04_generic_functions/text.html
index 1369c93..1369c93 100644
--- a/lessons/src/lesson017_generic_functions/text.html
+++ b/src/content/chapter1_functions/lesson04_generic_functions/text.html
diff --git a/lessons/src/lesson018_pipelines/code.gleam b/src/content/chapter1_functions/lesson05_pipelines/code.gleam
index ec9b805..ec9b805 100644
--- a/lessons/src/lesson018_pipelines/code.gleam
+++ b/src/content/chapter1_functions/lesson05_pipelines/code.gleam
diff --git a/lessons/src/lesson018_pipelines/text.html b/src/content/chapter1_functions/lesson05_pipelines/text.html
index 783ade9..783ade9 100644
--- a/lessons/src/lesson018_pipelines/text.html
+++ b/src/content/chapter1_functions/lesson05_pipelines/text.html
diff --git a/lessons/src/lesson019_labelled_arguments/code.gleam b/src/content/chapter1_functions/lesson06_labelled_arguments/code.gleam
index 25bb8c1..25bb8c1 100644
--- a/lessons/src/lesson019_labelled_arguments/code.gleam
+++ b/src/content/chapter1_functions/lesson06_labelled_arguments/code.gleam
diff --git a/lessons/src/lesson019_labelled_arguments/text.html b/src/content/chapter1_functions/lesson06_labelled_arguments/text.html
index b1d771c..b1d771c 100644
--- a/lessons/src/lesson019_labelled_arguments/text.html
+++ b/src/content/chapter1_functions/lesson06_labelled_arguments/text.html
diff --git a/lessons/src/lesson099_documentation_comments/code.gleam b/src/content/chapter1_functions/lesson099_documentation_comments/code.gleam
index a84dce6..a84dce6 100644
--- a/lessons/src/lesson099_documentation_comments/code.gleam
+++ b/src/content/chapter1_functions/lesson099_documentation_comments/code.gleam
diff --git a/lessons/src/lesson099_documentation_comments/text.html b/src/content/chapter1_functions/lesson099_documentation_comments/text.html
index c27bac6..c27bac6 100644
--- a/lessons/src/lesson099_documentation_comments/text.html
+++ b/src/content/chapter1_functions/lesson099_documentation_comments/text.html
diff --git a/lessons/src/lesson022_case_expressions/code.gleam b/src/content/chapter2_flow_control/lesson01_case_expressions/code.gleam
index 33c0290..6e1ed46 100644
--- a/lessons/src/lesson022_case_expressions/code.gleam
+++ b/src/content/chapter2_flow_control/lesson01_case_expressions/code.gleam
@@ -2,7 +2,7 @@ import gleam/io
import gleam/int
pub fn main() {
- let result = case int.random(0, 5) {
+ let result = case int.random(5) {
0 -> "It's zero!"
other -> "It's " <> int.to_string(other)
}
diff --git a/lessons/src/lesson022_case_expressions/text.html b/src/content/chapter2_flow_control/lesson01_case_expressions/text.html
index 7e9ac11..7e9ac11 100644
--- a/lessons/src/lesson022_case_expressions/text.html
+++ b/src/content/chapter2_flow_control/lesson01_case_expressions/text.html
diff --git a/lessons/src/lesson023_variable_patterns/code.gleam b/src/content/chapter2_flow_control/lesson02_variable_patterns/code.gleam
index 78eb050..7bcc93c 100644
--- a/lessons/src/lesson023_variable_patterns/code.gleam
+++ b/src/content/chapter2_flow_control/lesson02_variable_patterns/code.gleam
@@ -2,7 +2,7 @@ import gleam/io
import gleam/int
pub fn main() {
- let x = int.random(0, 5)
+ let x = int.random(5)
io.debug(x)
let result = case x {
diff --git a/lessons/src/lesson023_variable_patterns/text.html b/src/content/chapter2_flow_control/lesson02_variable_patterns/text.html
index 8154979..8154979 100644
--- a/lessons/src/lesson023_variable_patterns/text.html
+++ b/src/content/chapter2_flow_control/lesson02_variable_patterns/text.html
diff --git a/lessons/src/lesson024_string_patterns/code.gleam b/src/content/chapter2_flow_control/lesson03_string_patterns/code.gleam
index d1441a0..d1441a0 100644
--- a/lessons/src/lesson024_string_patterns/code.gleam
+++ b/src/content/chapter2_flow_control/lesson03_string_patterns/code.gleam
diff --git a/lessons/src/lesson024_string_patterns/text.html b/src/content/chapter2_flow_control/lesson03_string_patterns/text.html
index 0dd3274..0dd3274 100644
--- a/lessons/src/lesson024_string_patterns/text.html
+++ b/src/content/chapter2_flow_control/lesson03_string_patterns/text.html
diff --git a/lessons/src/lesson025_list_patterns/code.gleam b/src/content/chapter2_flow_control/lesson04_list_patterns/code.gleam
index a5619aa..e767d20 100644
--- a/lessons/src/lesson025_list_patterns/code.gleam
+++ b/src/content/chapter2_flow_control/lesson04_list_patterns/code.gleam
@@ -3,7 +3,7 @@ import gleam/int
import gleam/list
pub fn main() {
- let x = list.repeat(int.random(0, 5), times: int.random(0, 3))
+ let x = list.repeat(int.random(5), times: int.random(3))
io.debug(x)
let result = case x {
diff --git a/lessons/src/lesson025_list_patterns/text.html b/src/content/chapter2_flow_control/lesson04_list_patterns/text.html
index de55eef..de55eef 100644
--- a/lessons/src/lesson025_list_patterns/text.html
+++ b/src/content/chapter2_flow_control/lesson04_list_patterns/text.html
diff --git a/lessons/src/lesson026_list_recursion/code.gleam b/src/content/chapter2_flow_control/lesson05_list_recursion/code.gleam
index 370675a..370675a 100644
--- a/lessons/src/lesson026_list_recursion/code.gleam
+++ b/src/content/chapter2_flow_control/lesson05_list_recursion/code.gleam
diff --git a/lessons/src/lesson026_list_recursion/text.html b/src/content/chapter2_flow_control/lesson05_list_recursion/text.html
index 7f2351d..7f2351d 100644
--- a/lessons/src/lesson026_list_recursion/text.html
+++ b/src/content/chapter2_flow_control/lesson05_list_recursion/text.html
diff --git a/lessons/src/lesson027_multiple_subjects/code.gleam b/src/content/chapter2_flow_control/lesson06_multiple_subjects/code.gleam
index d7aa34a..d7aa34a 100644
--- a/lessons/src/lesson027_multiple_subjects/code.gleam
+++ b/src/content/chapter2_flow_control/lesson06_multiple_subjects/code.gleam
diff --git a/lessons/src/lesson027_multiple_subjects/text.html b/src/content/chapter2_flow_control/lesson06_multiple_subjects/text.html
index 26a7ea3..26a7ea3 100644
--- a/lessons/src/lesson027_multiple_subjects/text.html
+++ b/src/content/chapter2_flow_control/lesson06_multiple_subjects/text.html
diff --git a/lessons/src/lesson028_alternative_patterns/code.gleam b/src/content/chapter2_flow_control/lesson07_alternative_patterns/code.gleam
index 06a6562..06a6562 100644
--- a/lessons/src/lesson028_alternative_patterns/code.gleam
+++ b/src/content/chapter2_flow_control/lesson07_alternative_patterns/code.gleam
diff --git a/lessons/src/lesson028_alternative_patterns/text.html b/src/content/chapter2_flow_control/lesson07_alternative_patterns/text.html
index 10ad731..10ad731 100644
--- a/lessons/src/lesson028_alternative_patterns/text.html
+++ b/src/content/chapter2_flow_control/lesson07_alternative_patterns/text.html
diff --git a/lessons/src/lesson029_pattern_aliases/code.gleam b/src/content/chapter2_flow_control/lesson08_pattern_aliases/code.gleam
index ee40a26..ee40a26 100644
--- a/lessons/src/lesson029_pattern_aliases/code.gleam
+++ b/src/content/chapter2_flow_control/lesson08_pattern_aliases/code.gleam
diff --git a/lessons/src/lesson029_pattern_aliases/text.html b/src/content/chapter2_flow_control/lesson08_pattern_aliases/text.html
index b737eb8..b737eb8 100644
--- a/lessons/src/lesson029_pattern_aliases/text.html
+++ b/src/content/chapter2_flow_control/lesson08_pattern_aliases/text.html
diff --git a/lessons/src/lesson030_tuples/code.gleam b/src/content/chapter3_data_types/lesson00_tuples/code.gleam
index d5c6313..d5c6313 100644
--- a/lessons/src/lesson030_tuples/code.gleam
+++ b/src/content/chapter3_data_types/lesson00_tuples/code.gleam
diff --git a/lessons/src/lesson030_tuples/text.html b/src/content/chapter3_data_types/lesson00_tuples/text.html
index f121a9d..f121a9d 100644
--- a/lessons/src/lesson030_tuples/text.html
+++ b/src/content/chapter3_data_types/lesson00_tuples/text.html
diff --git a/lessons/src/lesson031_custom_types/code.gleam b/src/content/chapter3_data_types/lesson01_custom_types/code.gleam
index 35629bf..35629bf 100644
--- a/lessons/src/lesson031_custom_types/code.gleam
+++ b/src/content/chapter3_data_types/lesson01_custom_types/code.gleam
diff --git a/lessons/src/lesson031_custom_types/text.html b/src/content/chapter3_data_types/lesson01_custom_types/text.html
index dad6d12..dad6d12 100644
--- a/lessons/src/lesson031_custom_types/text.html
+++ b/src/content/chapter3_data_types/lesson01_custom_types/text.html
diff --git a/lessons/src/lesson032_records/code.gleam b/src/content/chapter3_data_types/lesson02_records/code.gleam
index bd6da3c..bd6da3c 100644
--- a/lessons/src/lesson032_records/code.gleam
+++ b/src/content/chapter3_data_types/lesson02_records/code.gleam
diff --git a/lessons/src/lesson032_records/text.html b/src/content/chapter3_data_types/lesson02_records/text.html
index f515ccd..f515ccd 100644
--- a/lessons/src/lesson032_records/text.html
+++ b/src/content/chapter3_data_types/lesson02_records/text.html
diff --git a/lessons/src/lesson033_record_accessors/code.gleam b/src/content/chapter3_data_types/lesson03_record_accessors/code.gleam
index 63ca721..63ca721 100644
--- a/lessons/src/lesson033_record_accessors/code.gleam
+++ b/src/content/chapter3_data_types/lesson03_record_accessors/code.gleam
diff --git a/lessons/src/lesson033_record_accessors/text.html b/src/content/chapter3_data_types/lesson03_record_accessors/text.html
index e8bbbc2..e8bbbc2 100644
--- a/lessons/src/lesson033_record_accessors/text.html
+++ b/src/content/chapter3_data_types/lesson03_record_accessors/text.html
diff --git a/lessons/src/lesson034_record_updates/code.gleam b/src/content/chapter3_data_types/lesson04_record_updates/code.gleam
index ed7b45b..ed7b45b 100644
--- a/lessons/src/lesson034_record_updates/code.gleam
+++ b/src/content/chapter3_data_types/lesson04_record_updates/code.gleam
diff --git a/lessons/src/lesson034_record_updates/text.html b/src/content/chapter3_data_types/lesson04_record_updates/text.html
index f23d7cd..f23d7cd 100644
--- a/lessons/src/lesson034_record_updates/text.html
+++ b/src/content/chapter3_data_types/lesson04_record_updates/text.html
diff --git a/lessons/src/lesson035_nil/code.gleam b/src/content/chapter3_data_types/lesson05_nil/code.gleam
index c28080b..c28080b 100644
--- a/lessons/src/lesson035_nil/code.gleam
+++ b/src/content/chapter3_data_types/lesson05_nil/code.gleam
diff --git a/lessons/src/lesson035_nil/text.html b/src/content/chapter3_data_types/lesson05_nil/text.html
index 3416643..3416643 100644
--- a/lessons/src/lesson035_nil/text.html
+++ b/src/content/chapter3_data_types/lesson05_nil/text.html
diff --git a/lessons/src/lesson036_bit_arrays/code.gleam b/src/content/chapter3_data_types/lesson06_bit_arrays/code.gleam
index dc772ca..dc772ca 100644
--- a/lessons/src/lesson036_bit_arrays/code.gleam
+++ b/src/content/chapter3_data_types/lesson06_bit_arrays/code.gleam
diff --git a/lessons/src/lesson036_bit_arrays/text.html b/src/content/chapter3_data_types/lesson06_bit_arrays/text.html
index 3214db1..3214db1 100644
--- a/lessons/src/lesson036_bit_arrays/text.html
+++ b/src/content/chapter3_data_types/lesson06_bit_arrays/text.html
diff --git a/src/try_gleam.gleam b/src/try_gleam.gleam
index 8c030e9..c788a71 100644
--- a/src/try_gleam.gleam
+++ b/src/try_gleam.gleam
@@ -3,7 +3,6 @@ import gleam/list
import htmb.{h, text}
import gleam/string_builder
import gleam/option.{type Option, None, Some}
-import gleam/pair
import gleam/string
import gleam/result
import simplifile
@@ -25,7 +24,7 @@ const stdlib_external = "build/packages/gleam_stdlib/src"
const compiler_wasm = "../gleam/compiler-wasm/pkg"
-const lessons_src = "lessons/src"
+const content_path = "src/content"
const hello_joe = "import gleam/io
@@ -45,8 +44,8 @@ pub fn main() {
use _ <- result.try(make_prelude_available())
use _ <- result.try(make_stdlib_available())
use _ <- result.try(copy_wasm_compiler())
- use p <- result.try(load_pages())
- use _ <- result.try(write_pages(p))
+ use p <- result.try(load_content())
+ use _ <- result.try(write_content(p))
Ok(Nil)
}
@@ -60,8 +59,12 @@ pub fn main() {
}
}
-type Page {
- Page(
+type Chapter {
+ Chapter(name: String, path: String, lessons: List(Lesson))
+}
+
+type Lesson {
+ Lesson(
name: String,
text: String,
code: String,
@@ -71,118 +74,175 @@ type Page {
)
}
-fn load_pages() -> snag.Result(List(Page)) {
- use lessons <- result.try(
- simplifile.read_directory(lessons_src)
- |> file_error("Failed to read lessons directory"),
- )
+type FileNames {
+ FileNames(path: String, name: String, slug: String)
+}
- let lessons =
- lessons
- |> list.sort(by: string.compare)
- |> list.index_map(pair.new)
-
- use pages <- result.try(
- list.try_map(lessons, fn(pair) {
- let #(lesson, index) = pair
- let path = lessons_src <> "/" <> lesson
- let name =
- lesson
- |> string.split("_")
- |> list.drop(1)
- |> string.join("-")
+fn load_directory_names(path: String) -> snag.Result(List(FileNames)) {
+ use files <- result.map(
+ simplifile.read_directory(path)
+ |> file_error("Failed to read directory " <> path),
+ )
+ files
+ |> list.sort(by: string.compare)
+ |> list.filter(fn(file) { !string.starts_with(file, ".") })
+ |> list.map(fn(file) {
+ let path = path <> "/" <> file
+ let slug =
+ file
+ |> string.split("_")
+ |> list.drop(1)
+ |> string.join("-")
+ let name =
+ slug
+ |> string.replace("-", " ")
+ |> string.capitalise
+ FileNames(path: path, name: name, slug: slug)
+ })
+}
- use code <- result.try(
- simplifile.read(path <> "/code.gleam")
- |> file_error("Failed to read code.gleam"),
- )
+fn load_chapter(names: FileNames) -> snag.Result(Chapter) {
+ let path = "/" <> names.slug
+ use lessons <- result.try(load_directory_names(names.path))
+ use lessons <- result.try(list.try_map(lessons, load_lesson(path, _)))
+ Ok(Chapter(name: names.name, path: path, lessons: lessons))
+}
- use text <- result.try(
- simplifile.read(path <> "/text.html")
- |> file_error("Failed to read text.html"),
- )
+fn read_file(path: String) -> snag.Result(String) {
+ simplifile.read(path)
+ |> file_error("Failed to read file " <> path)
+}
- let path = case index {
- 0 -> "/"
- _ -> "/" <> name
- }
-
- Ok(Page(
- name: name,
- text: text,
- code: code,
- path: path,
- previous: None,
- next: None,
- ))
- }),
- )
+fn load_lesson(chapter_path: String, names: FileNames) -> snag.Result(Lesson) {
+ use code <- result.try(read_file(names.path <> "/code.gleam"))
+ use text <- result.try(read_file(names.path <> "/text.html"))
+
+ Ok(Lesson(
+ name: names.name,
+ text: text,
+ code: code,
+ path: chapter_path
+ <> "/"
+ <> names.slug,
+ previous: None,
+ next: None,
+ ))
+}
- Ok(add_previous_next(pages, [], None))
+fn load_content() -> snag.Result(List(Chapter)) {
+ use chapters <- result.try(load_directory_names(content_path))
+ use chapters <- result.try(list.try_map(chapters, load_chapter))
+ Ok(add_prev_next(chapters, [], Some("/")))
}
-fn write_pages(pages: List(Page)) -> snag.Result(Nil) {
- use _ <- result.try(list.try_each(pages, write_page))
+fn write_content(chapters: List(Chapter)) -> snag.Result(Nil) {
+ let lessons = list.flat_map(chapters, fn(c) { c.lessons })
+ use _ <- result.try(list.try_map(lessons, write_lesson))
- let render = fn(h) { string_builder.to_string(htmb.render(h)) }
- let html =
- string.concat([
- render(h("h2", [], [text("Table of contents")])),
- render(h(
- "ul",
- [],
- list.map(pages, fn(page) {
- h("li", [], [
- h("a", [#("href", page.path)], [
- page.name
- |> string.replace("-", " ")
- |> string.capitalise
- |> text,
- ]),
- ])
- }),
- )),
- ])
-
- let page =
- Page(
+ let lesson =
+ Lesson(
name: "Index",
- text: html,
+ text: index_list_html(chapters),
code: hello_joe,
path: "/index",
previous: None,
next: None,
)
- write_page(page)
+ write_lesson(lesson)
}
-fn write_page(page: Page) -> snag.Result(Nil) {
- let path = public <> page.path
+fn index_chapter_html(chapter: Chapter) -> String {
+ string.concat([
+ render_html(h("h3", [#("class", "mb-0")], [text(chapter.name)])),
+ render_html(h(
+ "ul",
+ [],
+ list.map(chapter.lessons, fn(lesson) {
+ h("li", [], [
+ h("a", [#("href", lesson.path)], [
+ lesson.name
+ |> string.replace("-", " ")
+ |> string.capitalise
+ |> text,
+ ]),
+ ])
+ }),
+ )),
+ ])
+}
+
+fn render_html(html: htmb.Html) -> String {
+ html
+ |> htmb.render
+ |> string_builder.to_string
+}
+
+fn index_list_html(chapters: List(Chapter)) -> String {
+ h("h2", [], [text("Table of contents")])
+ |> render_html
+ |> string.append(
+ chapters
+ |> list.map(index_chapter_html)
+ |> string.join("\n"),
+ )
+}
+
+fn write_lesson(lesson: Lesson) -> snag.Result(Nil) {
+ let path = public <> lesson.path
use _ <- result.try(
simplifile.create_directory_all(path)
|> file_error("Failed to make " <> path),
)
let path = path <> "/index.html"
- simplifile.write(to: path, contents: page_html(page))
+ simplifile.write(to: path, contents: lesson_html(lesson))
|> file_error("Failed to write page " <> path)
}
-fn add_previous_next(
- rest: List(Page),
- acc: List(Page),
+fn add_prev_next(
+ rest: List(Chapter),
+ acc: List(Chapter),
previous: Option(String),
-) -> List(Page) {
+) -> List(Chapter) {
case rest {
+ [chapter1, Chapter(lessons: [next, ..], ..) as chapter2, ..rest] -> {
+ let lessons = chapter1.lessons
+ let #(lessons, previous) =
+ add_prev_next_for_chapter(lessons, [], previous, Some(next.path))
+ let chapter1 = Chapter(..chapter1, lessons: lessons)
+ add_prev_next([chapter2, ..rest], [chapter1, ..acc], previous)
+ }
+
+ [chapter, ..rest] -> {
+ let lessons = chapter.lessons
+ let #(lessons, previous) =
+ add_prev_next_for_chapter(lessons, [], previous, None)
+ let chapter = Chapter(..chapter, lessons: lessons)
+ add_prev_next(rest, [chapter, ..acc], previous)
+ }
+
[] -> list.reverse(acc)
- [page, next, ..rest] -> {
- let page = Page(..page, previous: previous, next: Some(next.path))
- add_previous_next([next, ..rest], [page, ..acc], Some(page.path))
+ }
+}
+
+fn add_prev_next_for_chapter(
+ rest: List(Lesson),
+ acc: List(Lesson),
+ previous: Option(String),
+ last: Option(String),
+) -> #(List(Lesson), Option(String)) {
+ case rest {
+ [lesson1, lesson2, ..rest] -> {
+ let next = Some(lesson2.path)
+ let lesson = Lesson(..lesson1, previous: previous, next: next)
+ let rest = [lesson2, ..rest]
+ add_prev_next_for_chapter(rest, [lesson, ..acc], Some(lesson.path), last)
}
- [page, ..rest] -> {
- let page = Page(..page, previous: previous, next: None)
- add_previous_next(rest, [page, ..acc], Some(page.path))
+ [lesson, ..rest] -> {
+ let lesson = Lesson(..lesson, previous: previous, next: last)
+ add_prev_next_for_chapter(rest, [lesson, ..acc], Some(lesson.path), last)
}
+ [] -> #(list.reverse(acc), previous)
}
}
@@ -353,7 +413,7 @@ fn file_error(
}
}
-fn page_html(page: Page) -> String {
+fn lesson_html(page: Lesson) -> String {
let navlink = fn(name, link) {
case link {
None -> h("span", [], [text(name)])
diff --git a/static/style.css b/static/style.css
index 113b57f..e69a80a 100644
--- a/static/style.css
+++ b/static/style.css
@@ -171,3 +171,7 @@ h6 {
.prev-next span {
opacity: 0.5;
}
+
+.mb-0 {
+ margin-bottom: 0;
+}