I'm a huge fan of languages that require you to explicitly export your functions (e.g. pub in Rust or export in JS).
It's much easier to change than a separate header file (.h in C, .mli in OCaml) and it enables local reasoning. You can see from the definition if it's exported.
miniblog.
Related Posts
Great, thoughtful discussion about the direction Racket wants go in. The reasoning is given and broader language goals are shared, way beyond syntax.
A metacircular interpreter in Prolog: https://www.metalevel.at/acomip/
The fact that this exists at all is mindbending to me. It's easy to just see Prolog as a logical reasoning engine.
Superb blog post about "explicit is better than implicit". Are you seeking to make something opt-in, promoting 'syntactic salt', or arguing for local reasoning?
https://boats.gitlab.io/blog/post/2017-12-27-things-explicit-is-not/