Gleam v1.14 - the happy holidays release 2025
69 points by giacomo_cavalieri
69 points by giacomo_cavalieri
Working with dependencies in Gleam was probably my biggest gripe when I started using it, and over the past couple of releases it's gotten so good. Merry Gleamas!
Nice to see all the improvements to the language server! I think it was one or two years ago that I first tried Gleam out and it was missing a lot of features; now it feels like one of the best ones.
Gleam has total and perfect type analysis, so it can tell the type of every expression in a project, assuming there are no errors in the code that cause it to fail to compile.
This is just a nitpick, but doesn't field access on structs without destructuring break type inference? This does not type check:
import gleam/io
pub type A { A(x: Int, y: String) }
pub fn foo(v) { v.y }
pub fn main() {
io.println(foo(A(1, "test")))
}
Type analysis, not type inference.
Inference requires annotations for record access in code where it is ambiguous what the record is, such as in that ‘too’ function.
I see. So "perfect type analysis" in the post is another way to say that Gleam has a sound type system?
I believe "sound type system" means that every well typed program adheres to the semantics of those types, avoiding runtime errors. Gleam does have that property[1], but I was trying to convey there that Gleam's type analysis understands precisely the type information of all code in any valid program.
[1]: Assuming the program has no bugs in any FFI it has with untyped languages, such as Erlang.