4,029 karma · joined October 12, 2015
"Prosecutors say Shkreli looted his drug company to pay back investors in two failed hedge funds he ran. The defense says investors got their original investments back and even made hefty profits."
In general the Idris type inference is not nearly as good as Haskells. I don't mean this in the "dependent type inference is undecidable" sense, but instead just generally.
Idris is also strict instead of lazy like Haskell. This is good or bad depending on who you ask. Very unlikely for it to change in Haskell though.
Many of the other issues are the issues with every small language. Community size and libraries.
There are a few differences such as Haskell being Lazy and OCaml being strict. The general way you write code will be similar as the semantics (besides strictness) and syntax are fairly similar.
There are specific cases where the ecosystem may have better tools for X or Y subject however this would depend on the particular domain.
A extreme claim against something is not proof of the claim itself. Regardless of it happening this kind of FOR THE CHILDREN social shaming is unacceptable.
Lets not jump the gun on repeated military campaigns.
Every DHT has to be bootstrapped from something. If that makes it not distributed then i'm not sure anything is. You can use whatever bootstrap nodes you want by changing the values.
return takes a value and returns an instance of your template class containing the value.
bind takes an instance of your (template class A) a function of (type a ) to (template class B) and produces a value of (template class B).
If you don't care about the "laws" your definitions are expected to follow thats it.
The idea bind is you take a value of a template class such as (std::vector<Int> type) the value {3}, then based on value either pass it to the next function or return it.
one definition of bind would be if the vector is empty return it, if its not empty pass it to this function and return the result of that function.
return is just a way of placing a value into your template container class.
You take a c++ parent class with two virtual methods. These methods are "return" and "bind". In order to implement a monad instance you must derive from this parents class and implement the virtual methods.
(>>) :: m a -> m b -> m b
There are two forms of bind.
The >> function is used when the function does not need the value produced by the first monadic operator.
If you want some kind of global state of the current results then you just pass around the current calculated states. Pure FP has many simple solutions for passing around state.
If all you want is to take some kind of search function or backtracking system that generates a stream of results then combining the sub branches is trivial. If you represent a stream as a list and use something like Haskell that is lazy, then all you have to do is literally combine the streams.
myStreamGenerator1 p1 ++ myStreamGenerator2 p2
if you want a different search strategy you can intersperse.
concat . intersperse (mySG1 p1) (mySG2 p2)
the cases being DFS and BFS
You guys know, it just dawned on me that beyond the practicalities of the question, we're looking at something incredibly significant here. That is, if this story is in fact genuine and not just a fictious commentary on subscription models.
So first of all... a software activation model from the '80s? Twenty years before Microsoft "invented" it? Back when even ARPANet was only a curiosity? That's something incredibly awesome. Key disks, manual code entry, and serial or parallel hardware keys were a thing - remote activation, now that's something else entirely.
It's like finding an ancient Egyptian D&D-like rulebook and twenty sided dice dating from the age of pharaoh Ramses. Not "impossible" as such, just extremely remarkable and improbable.
Then, the other wonder here is not that the activation server stopped, it's that it stopped in twenty-effing-seventeen. I'd have expected that BBS to have been scrapped around '95 at the latest. Also, phone numbers - where I grew up, phone number formats and area codes have changed three times since the '80s, a BBS call coded in the '80s would have stopped working before '91.
Also, I cannot imagine the change-averseness of someone who keeps using a CAD suite from the '80s (probably on some ancient XT or DEC or something weird and irreplacable) well into the 2010s. I mean my dad is the image of conservativeness, and yet even he migrated all his CAD work from the old DOS tools over to Windows-based, modern stuff when Windows NT 4.0 came out...
I'm not saying "it's not true", just that if it is, this should probably be on some Youtube computing history show as the curiosity of the year.
Python is particularly easy to reverse engineer because you usually ship the source code which is then interpreted. They can read what you wrote literally. If you did a compiled variant this is not as bad.
Java can be reverse engineered as the code is just in time compiled. For example minecraft modding communities would routinely extract the source code repack it with new features.
There are always things you can do to make it harder (using a very optimized binary out of GCC with symbols stripped). But the general rule is, if you don't want them to have it, don't give it to them. Run it personally and give them a remote interface.