This pull request builds on the type variables introduced in #32 generalizing free variables of definitions into type schemes, allowing for let-polymorphism. Very conveniently, this means that the syntax of lambda abstractions does NOT contain its type, simplifying many program transformations.
This pull request also updates term enumeration to work for polymorphic components by unifying the freshened codomain of a potential component with the target hole type (rather than syntactically checking for equality).
This pull request builds on the type variables introduced in #32 generalizing free variables of definitions into type schemes, allowing for let-polymorphism. Very conveniently, this means that the syntax of lambda abstractions does NOT contain its type, simplifying many program transformations.
This pull request also updates term enumeration to work for polymorphic components by unifying the freshened codomain of a potential component with the target hole type (rather than syntactically checking for equality).