import gleam/dynamic import gleam/iterator import gleam/result @external(erlang, "io", "get_line") @external(javascript, "./js_ffi.mjs", "read_line") fn ffi_read_line(prompt: String) -> dynamic.Dynamic fn read_line() -> Result(String, Nil) { ffi_read_line("") |> dynamic.from() |> dynamic.string() |> result.nil_error() } pub fn stdin() -> iterator.Iterator(String) { iterator.repeatedly(read_line) |> iterator.take_while(fn(it) { case it { Ok(_) -> True Error(_) -> False } }) |> iterator.map(fn(it) { let assert Ok(line) = it line }) } import gleam/io pub fn main() { stdin() |> iterator.to_list |> io.debug }