aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/gleam/string.gleam20
-rw-r--r--test/gleam/string_test.gleam14
3 files changed, 28 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e4d91dd..e424e0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,8 +5,8 @@
- Created the `io` module with `print` function.
- The `result` module gains the `nil_error` function.
- The `string` module gains `trim`, `trim_left`, `trim_right`, `starts_with`,
- `ends_with`, `slice`, `pad_left`, `pad_right` `drop_left`, `drop_right` and
- `pop_grapheme` functions.
+ `ends_with`, `slice`, `pad_left`, `pad_right` `drop_left`, `drop_right`,
+ `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.
diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam
index cf2a585..a6c7944 100644
--- a/src/gleam/string.gleam
+++ b/src/gleam/string.gleam
@@ -400,14 +400,6 @@ pub fn trim_right(string: String) -> String {
erl_trim(string, Trailing)
}
-// TODO
-// /// Convert a string to a list of Graphemes.
-// ///
-// /// > to_graphemes("abc")
-// ['a','b','c']
-//
-// ///
-// pub fn to_graphemes(string: String) -> List(String) {}
/// Split a non-empty string into its head and tail. This lets you
/// pattern match on strings exactly as you would with lists.
///
@@ -420,3 +412,15 @@ pub fn trim_right(string: String) -> String {
///
pub external fn pop_grapheme(string: String) -> Option(tuple(String, String)) =
"gleam_stdlib" "string_pop_grapheme"
+
+/// Convert a string to a list of Graphemes.
+///
+/// > to_graphemes("abc")
+/// ["a", "b", "c"]
+///
+pub fn to_graphemes(string: String) -> List(String) {
+ case pop_grapheme(string) {
+ Ok(tuple(grapheme, rest)) -> [grapheme, ..to_graphemes(rest)]
+ _ -> []
+ }
+}
diff --git a/test/gleam/string_test.gleam b/test/gleam/string_test.gleam
index c8eae63..2fbb84f 100644
--- a/test/gleam/string_test.gleam
+++ b/test/gleam/string_test.gleam
@@ -267,3 +267,17 @@ pub fn pop_grapheme_test() {
|> string.pop_grapheme()
|> should.equal(Error(Nil))
}
+
+pub fn to_graphemes_test() {
+ "abc"
+ |> string.to_graphemes()
+ |> should.equal(["a", "b", "c"])
+
+ "a"
+ |> string.to_graphemes()
+ |> should.equal(["a"])
+
+ ""
+ |> string.to_graphemes()
+ |> should.equal([])
+}