3 ms·
I'm not an expert on the theory, but OCaml has a very fast compiler and while it is (almost) capable of fully reconstructing the types from a program with no an
by steinuil 2y ago
I'm not an expert on the theory, but OCaml has a very fast compiler and while it is (almost) capable of fully reconstructing the types from a program with no annotations, it doesn't have to deal with ad-hoc polymorphism and takes some shortcuts like weak polymorphism when it gets too hard: https://www.ocaml.org/manual/5.2/polymorphism.html https://www.ocaml.org/manual/5.2/polymorphism.html
- tombert 2y agoWait what? In Haskell the types are usually directly inferrable from the arguments they're being used as, and when you put a type annotation it's usually not explicit types (Num a => a -> b -> c). I almost never bother putting types in Haskell, unless I want to guarantee some constraint, in which case I typically use typeclasses. Maybe I'm just weird but I don't think so. One of the very few things I actually like about Haskell is how good the type inference is.
- fweimer 2y agoTry this: let f0 = fun x -> (x, x) in let f1 = fun y -> f0(f0 y) in let f2 = fun y -> f1(f1 y) in let f3 = fun y -> f2(f2 y) in let f4 = fun y -> f3(f3 y) in let f5 = fun y -> f4(f4 y) in f5 (fun z -> z) Lifted from https://dl.acm.org/doi/pdf/10.1145/96709.96748 https://dl.acm.org/doi/pdf/10.1145/96709.96748 via Pierce, Types And Programming Languages.
- _flux 2y agoBut that's just a type that is huge. I didn't want to wait for the evaluation, but if I drop the f5 out, I got a type that is 1.6 megabytes long when printed without spaces. It's still very fast for "normal size" types. That reduced version compiles in 151 milliseconds.