357 karma · joined January 1, 2013
And then on the political side it's just straight up corruption
I'll be rethinking using Artifactory in my infrastructure.
The whole haskell project is about allowing programmers to write code that is declarative without making concessions for performance. Laziness makes this possible because it abstracts out evaluation order and thus allows extreme optimization by the compiler
Obviously the conflation of a bunch of different use-cases into this one protocol is a problem, but I don't know that just making email more secure is a solution.
This is essentially how React.js works; you don't need to tag strings as safe or unsafe because strings are never treated as HTML, only constructed HTML values (via JSX) are treated as HTML.
e{lbl = val, lbl2 = val2}More specifically sum types in Rust must also be tagged, meaning you need to explicitly construct and deconstruct them. This aspect is along the type-alias vs newtype axis which gets into structural vs nominative typing and the trade-offs therein.
So yes, Rust enums and Typescript union types are both exactly sum-types and the differences are due to the surrounding decisions made about the languages. Rust's sum types are named and tagged, Typescript's are anonymous and untagged, but they're both sum types.
When Python adds new string formatters or generators or async, they're just in the language. When Haskell does that they require you to explicitly turn the new feature on. It's just a different strategy of managing language change. Versus the classical approach you get a lot more eyes on your language additions and have a nice "beta" period where you can make improvements before there is wide adoption.
This is basically the same approach that Rust is taking but they've been better about removing the feature flag when the feature is stabilized.
The reality that you and other "bootstraps" people ignore is that there is a basic cost-of-living. People need to make rent, they need to pay medical expenses, etc. If your income doesn't rise above this cost-of-living (which is true for literally half of the US population) you don't have any small amounts of money to invest. A lot of long-term investment vehicles have costs for taking out money early, which is a significant risk if you might need that money for an emergency.
The wealthier you are, the more ways there are to increase your wealth and there is absolutely a floor under which you have no opportunities besides luck
The tooling is definitely an issue for bringing in beginners, but as far as the build process goes if you're using docker and hosting your own package mirror (as you should be for a professional deployment) it's perfectly serviceable.
Even when it's not counterfeit a lot of brands sell a cheaper version on Amazon than they do through other retailers.
If you're talking about exhaustiveness checks, you can disable those and use `-fdefer-type-errors` to compile programs which don't type-check.
Although I will say that most of the time when you have a Maybe instance that you know is Just, it means you're branching in the wrong part of your program.
If the only answer to the question is agreement then the deference is false. Phrasing orders as questions really only makes authoritarian managers feel better about themselves; nobody under 40 thinks this is an actual question.
These are sometimes useful for optimization but in an unfortunate bit of history, some developers decided to use these to "simulate" Haskell's lazy semantics for side-effecting I/O operations, the so-called "lazy I/O".
Fortunately this is just a few functions in the standard library which you can simply avoid and serious Haskell codebases should use a linter to prevent people from calling them.