We didn't use Pringles, I think it was these big peaches cans
I once made one of these with a bigger can and mounted it on an old 10' satellite dish. Managed to get Wi-Fi across several thousand yards without issue
Let's be real, Witcher 3 is just a Gwent launcher.
Also I've definitely played more Pazaak than KOTOR.
In practical terms, it's most commonly a code pattern where any function that interacts with something outside your code (database, filesystem, external API) is "given permission" so all the external interactions are accounted for. You have to pass around something like a permission to allow a function to interact with anything external. Kind of like dependency injection on steroids.
This allows the compiler to enhance the code in ways it otherwise couldn't. It also prevents many kinds of bugs. However, it's quite a bit of extra hassle, so it's frustrating if you're not used to it. The way you pass around the "permission" is unusual, so it gives a lot of people a headache at first.
This is also used for internal permissions like grabbing the first element of an array. You only get permission if the array has at least one thing inside. If it's empty, you can't get permission. As such there's a lot of code around checking for permission. Languages like Haskell or Unison have a lot of tricks that make it much easier than you'd think, but you still have to account for it. That's where you see all the weird functions in Haskell like fmap
and >>=
. It's helpers to make it easier to pass around those "permissions".
What's the point you ask? There's all kinds of powerful performance optimizations when you know a certain block of code never touches the outside world. You can split execution between different CPU cores, etc. This is still in it's infancy, but new languages like Unison are breaking incredible ground here. As this is developed further it will be much easier to build software that uses up multiple cores or even multiple machines in distributed swarms without having to build microservice hell. It'll all just be one program, but it runs across as many machines as needed. Monads are just one of the first features that needed to exist to allow these later features.
There's a whole math background to it, but I'm much more a "get things done" engineer than a "show me the original math that inspired this language feature" engineer, so I think if it more practically. Same way I explain functions as a way to group a bunch of related actions, and not as an implementation of a lambda calculus. I think people who start talking about burritos and endofunctors are just hazing.
Just remember crossover is hardly ever used now. Straight is almost always what you need for typical use.
The relief of not needing to mask anymore hits hard
This article feels like it was written by an old man yelling at clouds. "... Back in my day we smoked mid and we liked it" shakes fist and then uses it as a reason to go back to prohibition. Why can't we just make it legal and let the free market figure it out.
Turns out more THC for the buck means people can make a few months supply of edibles out of a few grams. Cost effective!
Chainsaw and a skylight. A big one too, like one of these
And yeah, yeah, I've heard they are a pain to maintain and break easily. I don't care, I'll fix it every week if that means I get a balcony and fresh air every day.
A classic that kind of means the same thing is "me thinks he doth protest too much" from Shakespeare to indicate someone who brings up a topic they are guilty of.
"and then we told them, everyone getting to vote isn't a fair election"
"And then we told them, we only hate trans people, not gays and blacks"
"And then we told them, deregulation frees billionaires to take care of the planet more efficiently"
"And then we told them, school shootings are caused by not enough guns in schools"
F# is such a fantastic language.
I'd not hesitate a second to use it (and Fable) for my own startup. I'm very comfortable with Ruby, Clojure, Haskell, Perl, PHP, Python, Java, Typescript, and C#. Yet I would pick F# over all of those in a heartbeat.
F# has great type safety (but not forced into monad transformer chaos like Haskell). You need about 1/3rd less code than C# and Java, and the compiler will find more bugs than in those languages.