flix
flix copied to clipboard
Polymorphic recursion breaks monomorphization
pub def main(): Bool = f(32, 12)
pub def f(x: t, n: Int32): Bool = {
if (n == 0) true else f(x :: Nil, n - 1)
}
Exception in thread "ForkJoinPool-3-worker-7" java.lang.OutOfMemoryError: Java heap space
at ca.uwaterloo.flix.language.ast.Type.map(Type.scala:167)
at ca.uwaterloo.flix.language.ast.Type.map$(Type.scala:164)
at ca.uwaterloo.flix.language.ast.Type$Apply.map(Type.scala:451)
at ca.uwaterloo.flix.language.ast.Type.map(Type.scala:167)
at ca.uwaterloo.flix.language.ast.Type.map$(Type.scala:164)
at ca.uwaterloo.flix.language.ast.Type$Apply.map(Type.scala:451)
at ca.uwaterloo.flix.language.ast.Type.map(Type.scala:167)
at ca.uwaterloo.flix.language.ast.Type.map$(Type.scala:164)
at ca.uwaterloo.flix.language.ast.Type$Apply.map(Type.scala:451)
at ca.uwaterloo.flix.language.ast.Type.map(Type.scala:167)
at ca.uwaterloo.flix.language.ast.Type.map$(Type.scala:164)
at ca.uwaterloo.flix.language.ast.Type$Apply.map(Type.scala:451)
at ca.uwaterloo.flix.language.ast.Type.map(Type.scala:167)
at ca.uwaterloo.flix.language.ast.Type.map$(Type.scala:164)
at ca.uwaterloo.flix.language.ast.Type$Apply.map(Type.scala:451)
Notice this can also happen through mutual recursion
pub def main(): Bool = f(32, 12)
pub def g(x: t, n: Int32): Bool = f(x, n)
pub def f(x: t, n: Int32): Bool = {
if (n == 0) true else g(x :: Nil, n - 1)
}