Fork me on GitHub

@otfrom not arguing with that but you still need to understand what the impact of laziness and eagerness is & which fns use which to avoid bear traps. This implicit knowledge is generally not as simple as imperative statements.


yes - some language features can have complex implications e.g. laziness, mutability, async, concurrency. if you primarily want a quick solution with minimal risk of surprising or difficult-to-find bugs you would probably do well to avoid all of these things simple_smile


I'm fine with having to know this stuff but we sometimes claim simplicity when it's not perhaps as obvious & initiative as we claim.


it's more chunking than laziness the issue usually


as long as you have either pure 1-element at-at-time lazyness or pure eagerness, it's easy to reason about


but when you mix chunking with laziness, you're suddently mixing eagerness and lazyness in non intuitive ways


in my case it was an issue of understanding which fn's are eager and which lazy. You need implicit knowledge of which is which. My point is you can't tell intuitively which are which, you need to remember.


Nothing to do with chunking


For example, Clojure has immutable data structures by default and very explicit constructs for state management (atom, refs, agent, var). However, laziness/eagerness is not explicit! Not to me anyway.


I am sure most of you really don't understand my struggle with this stuff as it comes naturally but I have real problems with it. With more imperative languages it's obvious when actions happen.


I am simply stating that my personal experience is this stuff is hard to reason about.


@agile_geek: i remember struggling with lazy stuff, and i've certainly had some (not dissimilar) struggles with async stuff more recently... i guess i learnt how to hunt down those kind of bugs, how to avoid them, and how to recognise their causes


but yeah, the errors can be distinctly non-obvious


and i have resorted to binary-chop debugging at least once :)


I still struggle with clojure and resources (io, network, databases, etc)