Это всплыло при запуске одного и того же модуля Gleam на обеих целевых платформах, и это скорее факт о среде выполнения, чем о языке.
import gleam/int
import gleam/io
pub fn main() {
let id = 9_007_199_254_740_993
io.println(int.to_string(id))
}
gleam run печатает 9007199254740993. gleam run --target javascript печатает 9007199254740992. На платформе Erlang Int - это целое BEAM, и оно растёт, пока хватает памяти. В JavaScript компилятор отображает Int в обычное число JS, то есть double, так что всё, что больше 2^53, округляется до соседнего значения. Тип в исходнике тот же, код тот же, а две среды выполнения тихо расходятся. Ошибки нет ни там, ни там.
Настоящее значение пришло из JSON, литерал здесь просто самый короткий способ воспроизвести. Как вы обращаетесь с целыми, которые должны значить одно и то же на обеих платформах?