6 ms·
Programming with Effects
- zozbot234 7y agoIn a typical PL context "effects" is always short for algebraic effects, and this article doesn't address those at all. Downvoted due to misleading title.
- curryhoward 7y ago> In a typical PL context "effects" is always short for algebraic effects The word "effects" has a long and storied history in programming language theory that predates algebraic effects/handlers by decades. The study of effect systems includes algebraic effects but also monads and other type and effect systems. In some situations the lines between these are blurred, for example with "extensible effects" which are algebraic effects implemented by a free(r) monad combined with "data types a la carte"-style open unions.
- tel 7y agoAlgebraic effects are a popular subclass of effects, but not all effects of use in programming (or worthy of study!) are algebraic. The simplest example is the continuation effect. It's not immediately clear why this effect isn't algebraic (it's not even immediately clear what "algebraic" means) but suffice to say continuations are very weird and behave very differently from other effects. At the same time, they're very useful and are a useful part of someone's programming vocabulary.
- lonelappde 7y agoYou are downvoting because the article is about what it said in the headline and not something else? Because a news site is only for "typical" things?
- rossmohax 7y agohow often does it happen, that you'd want to swap effects without changing program code? I don't think it is a strong selling point. As someone who is interested in FP, but still at the beginning of the journey, I found the blog post interesting to read, especially intuition for every Monad.
- mrkeen 7y agoI replaced one type of Future for another in a large Java codebase. Not productive. I had a colleague who wanted to rewrite the same piece of code using Observables instead. Later in a different company I met someone who was working on the exact opposite, i.e. taking Observable code and rewriting it as Futures because "observables are confusing". Just extract these things behind an interface and call it a day.
- AzzieElbab 7y agofutures have a lot of gottyas that make them hard to replace. for example, where and how you initialize them matters
- mundacho 7y agoIt's done a lot, it's used for mocking in FP. For example, I hace a monad that saves to a database using effects. I change the effect to update an array instead and I have code that I can use in a unit test.
- joppy 7y agoThe example often used is something like the Reader monad, which is basically used like dependency injection. Run your code in an isolated environment to test, and connect it to the real application just by swapping the environment (effects/monad). A more interesting example could be monads as used in Haxl, which give an alternative monad in which to run database queries, which can perform complicated batching of requests behind the scenes with no change of business logic code.
- coldtea 7y ago>how often does it happen, that you'd want to swap effects without changing program code? Anytime you want to test (and e.g. don't perform the actual side effects but mock them)? Or change from e.g. logging to a file to logging to a DB or syslog? And lots of other cases!
- jakear 7y ago
- theCodeStig 7y agoAlthough, I'm familiar with the concepts; I posit that the examples in the post are too general. Due to the generality of the examples, the concepts may be difficult for beginners to pick up, or to see any benefit. I suggest the (free) book Scala with Cats as an alternative.
- lonelappde 7y agoWhat's the value in paying the cost for an HTML rendering but rendering text in a monospace typewriter format? This "techie" affectation farms readability.