Does anyone have suggestions for reducing redundant code between infer/check phases of bidirectional type checking? One suggestion I've seen is to merge the two by replacing inference with checking against an updateable type slot that's initially empty, but I've found that I often prefer the more functional (and more verbose) style to this.
@zwarich my implementation of a bidirectional type system doesn't have much redundant code (there is one place where the code is similar enough to consider if i should deduplicate it, but on a closer look it's quite different).
What is redundant in yours?