mirror of
https://github.com/GaloisInc/cryptol.git
synced 2024-12-26 01:13:09 +03:00
284338c938
When `:set mono-binds=on`, any local definitions lacking type signatures will not be generalized (i.e., will be monomorphic). This reduces what is in most cases unnecessary polymorphism that can give rise to constraints that are difficult to solve. This also improves the performance of the Cryptol interpreter by lifting many polymorphic type applications out of the inner loops that are commonly defined as bindings in `where` clauses. The flag is on by default in the Cryptol REPL, and in most cases makes it possible to leave out more type signatures in `where` clauses than before. However, some programs really do rely on inferring polymorphic types for local variables; in this case adding an explicit polymorphic type signature to the local binding in question will make the program typecheck.
10 lines
286 B
Plaintext
10 lines
286 B
Plaintext
module test03 where
|
|
|
|
// expression with a free type variable. Since mono-binds
|
|
// monomorphizes everything rather than using fancy rules to generalize
|
|
// some local binds, this test probably isn't relevant anymore
|
|
test : {a} (fin a, a >= width a) => [a]
|
|
test = foo
|
|
where
|
|
foo = `(a)
|