aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2020-05-24 22:53:24 +0100
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commitbac2d26f56770aa3612b87f358528e2e2daeda9e (patch)
treeccd1b808acdde8be4c10bc00fba4d47324cf7c14
parentddd89605d1c665cb5482a9cce174b9463c7188bc (diff)
downloadgleam_stdlib-bac2d26f56770aa3612b87f358528e2e2daeda9e.tar.gz
gleam_stdlib-bac2d26f56770aa3612b87f358528e2e2daeda9e.zip
io.{prinln, debug}
-rw-r--r--CHANGELOG.md5
-rw-r--r--src/gleam/io.gleam48
2 files changed, 47 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 90221f6..73d2461 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Created the `set` module with the `new`, `insert`, and `contains` functions.
-- Created the `io` module with the `print` function.
+- Created the `io` module with the `print`, `println`, and `debug` functions.
- Created the `queue` module with the `new`, `from_list`, `to_list`,
`is_empty`, `length`, `push_back`, `push_front`, `pop_back`, `pop_front`,
`reverse`, `is_logically_equal`, and `is_equal` functions.
@@ -18,7 +18,8 @@
`pop_grapheme` and `to_graphemes' functions.
- `uri` module created with `parse`, `parse_query`, `path_segments`,
`query_to_string` and `to_string`.
-- The `dynamic` module gains the `map`, `opaque_list`, `tuple2`, and `tuple2_of` functions.
+- The `dynamic` module gains the `map`, `opaque_list`, `tuple2`, and
+ `tuple2_of` functions.
- The `list` module gains the `filter_map` function.
- The `list.contains` label `has` has been changed to `any`.
diff --git a/src/gleam/io.gleam b/src/gleam/io.gleam
index f4c1ad5..9fef99a 100644
--- a/src/gleam/io.gleam
+++ b/src/gleam/io.gleam
@@ -1,6 +1,6 @@
external type DoNotLeak
-external fn erl_print(String) -> DoNotLeak =
+external fn erl_print(String, List(a)) -> DoNotLeak =
"io" "fwrite"
/// Writes a string to standard output.
@@ -8,10 +8,50 @@ external fn erl_print(String) -> DoNotLeak =
/// ## Example
///
/// > io.print("Hi mum")
+/// // -> Hi mum
/// Nil
-/// //=> Hi mum
-///
+///
pub fn print(string: String) -> Nil {
- erl_print(string)
+ erl_print(string, [])
+ Nil
+}
+
+/// Writes a string to standard output, appending a newline to the end.
+///
+/// ## Example
+///
+/// > io.println("Hi mum")
+/// // -> Hi mum
+/// Nil
+///
+pub fn println(string: String) -> Nil {
+ erl_print("~ts\n", [string])
+ Nil
+}
+
+/// Print a value to standard output using Erlang syntax.
+///
+/// The value is returned after being printed so it can be used in pipelines.
+///
+/// ## Example
+///
+/// > io.debug("Hi mum")
+/// // -> <<"Hi mum">>
+/// "Hi mum"
+///
+/// > io.debug(Ok(1))
+/// // -> {ok, 1}
+/// Ok(1)
+///
+/// > import list
+/// > [1, 2]
+/// > |> list.map(fn(x) { x + 1 })
+/// > |> io.debug
+/// > |> list.map(fn(x) { x * 2 })
+/// // -> [2, 3]
+/// [4, 6]
+///
+pub fn debug(term: anything) -> Nil {
+ erl_print("~tp\n", [term])
Nil
}