I've worked with systems where some of the things were defined as a DSL within Kotlin (with implicit receivers and a shitton of extension functions), so you can definitely shoot yourself in the foot.
I think it's ameliorated by being designed by an IDE developer, so all that magic has control+click to go to definition. I've debugged some hairy nested implicit receiver code with jetpack compose pointer events, and found it very easy to read exactly what was executed.
I'm a beginner though, and kotlin was the first language where it occurred to me I could just read the source of a library.
I'm a beginner though, and kotlin was the first language where it occurred to me I could just read the source of a library.