diff options
-rw-r--r-- | lessons/README.md | 22 | ||||
-rw-r--r-- | lessons/gleam.toml | 9 | ||||
-rw-r--r-- | lessons/manifest.toml | 11 | ||||
-rw-r--r-- | lessons/test/lessons_test.gleam | 12 | ||||
-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.gleam | 238 | ||||
-rw-r--r-- | static/style.css | 4 |
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 - -[](https://hex.pm/packages/lessons) -[](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; +} |