Packages

This package provides a synchronous iterator for consuming stdin. It supports all the non-browser targets, Erlang, Node, Deno, and Bun.

Current section

Files

Jump to
stdin src stdin.gleam
Raw

src/stdin.gleam

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
}