Here is a draft of camlp4 extension warning on value shadowing : http://bluestorm.info/camlp4/dev/pf_shadow/list.php You can use it as a preprocessor to your source file, and it will raise warnings on value shadowing. For example (more examples in the test.ml file), your input gives the warning : File "input.ml", line 4, characters 6-8: shadowing binding 'xs' from File "input.ml", line 2, characters 8-10 Recursive bindings are handled, but classes, types and modules are not : it is a reasonable proof of concept, and if somebody is interested in more exhaustiveness, i (or whoever) could probably extend it easily.