Итак, сегодня я думал, что нашел способ перечислять только линейные термины, при этом лениво обрезая мертвые ветви. Это дало бы огромный прирост скорости в SupGen, но это не сработало :( так что мы снова возвращаемся к перечислению полных λ-термов. С положительной стороны, я узнал, что мы можем перечислять все термины произвольных типов данных, не разделяя метки, просто строя это как аккумулятор с отверстиями. Это не кажется очень полезным, но, в любом случае, вот исходный код HVM3: