Y
HN Search
Hacker News Search
new
|
comments
|
top
|
jobs
matt-noonan
searching PlanetScale…
1.
▲
2.
▲
3.
▲
4.
▲
5.
▲
6.
▲
7 ms
·
31.
▲
by
matt-noonan
7y ago
Yes, you are mistaken. You need 3 dimensions to represent a 3D rotation (2 for picking an axis, plus one for picking an angle). To represent translations and rotations together, you need 6 dimensions. This also shows that the talk of needin
32.
▲
by
matt-noonan
7y ago
This is a pro-level troll! For context, see slides 5 and 6 about the history of Hyperscan and Sensory Networks Inc.: https://openisf.files.wordpress.com/2015/11/oisf-keynote-201...
33.
▲
by
matt-noonan
7y ago
There are two different notions of algebra in common usage. One is the definition you gave (vector space with a bilinear product, as in Lie algebras, Clifford algebras, etc). The other definition, as used in the blog, comes from universal a
34.
▲
by
matt-noonan
7y ago
> How common is it for the same person to have both strong Haskell experience and experience building large real-world applications? I would conjecture that it is more common than what you’d expect from random chance. In my case, I picke
35.
▲
by
matt-noonan
7y ago
You mean the seven fundamental constants? e^(i * pi) + 1 = 0 * 17 * 42
36.
▲
by
matt-noonan
8y ago
I don't disagree, except to say that "don't break anyone's code" is a bit better than "break in a way that the compiler catches and helps you fix", which is a GREAT deal better than "silently break co
37.
▲
by
matt-noonan
8y ago
No, I'm arguing that this kind of breaking change is fine-ish, because the compiler helps the end users upgrade their code to the new API in a very straightforward way. In other words, I'm arguing that this kind of breaking change
38.
▲
by
matt-noonan
8y ago
Even without wrapping, I'm not sure that "it breaks existing callers" is such an awful thing. Yes, it is slightly annoying. And if it was a language like Python, making a function suddenly start returning None is going to si
39.
▲
by
matt-noonan
8y ago
I'm not sure about the history. It looks like UHC supported existential types at some point, but I'm not sure how that would interact with what I am presuming is a more sophisticated system in GHC Haskell. This post had some inter
40.
▲
by
matt-noonan
8y ago
> I just haven't seen it in practice, and the few studies that have looked at it empirically haven't seen a clear advantage either. If you know of such a study, please point it out! This is basically right; there are not a ton
41.
▲
by
matt-noonan
8y ago
That blog post was a nice read, thanks! I realize this is just one example, but you might be interested to know that I've done some work making this kind of invariant enforceable via static types (though in practice, you need a combina
42.
▲
by
matt-noonan
8y ago
I'd rather have the compiler ensure that my discipline (and my team's) never slips, and to get guarantees about all possible executions instead of just those executions that have been tested. For these reasons and others, I don&#x
43.
▲
by
matt-noonan
8y ago
In Haskell designs, developers tend to be quite careful about setting things up so that verifying types does indicate valid data. Coming from other languages (C++, Common Lisp, and Python in my case), it can be a little surprising just ho
44.
▲
by
matt-noonan
8y ago
Interesting, thanks! I hadn't considered using "forall a. a" as the bottom type, but it makes sense.
45.
▲
by
matt-noonan
8y ago
The "should be able to just return its argument" part is wrong; the types pretty clearly don't match, yeah? It is true that there is a unique function of type `Void -> a` for each `a`, but that isn't it.
46.
▲
by
matt-noonan
8y ago
`Void -> a` is inhabited by the slightly weird empty-case construct in (GHC) Haskell: `\x -> case x of {}` has type `Void -> a`
47.
▲
by
matt-noonan
8y ago
> So I immediately hit a block as I'm struggling to understand why I need the notion of a Functor to understand what in the end looks like just lazy mapping of a function over a stream. You don't, for this one example. You don&
48.
▲
by
matt-noonan
8y ago
Haskell got exceptions in 1999, I think, but your guess about the motivation as "oh, whoops, result types don't scale" is entirely unfounded. The real issue is this: figuring out how to do exceptions in a lazy language is sim
49.
▲
by
matt-noonan
8y ago
Yes, you really need at least Pi types (dependent products, as above) or Sigma types (dependent pairs) to have dependent types. So you could get away with it in Python by munging a return type based on a parameter, but not C++ or most oth
50.
▲
by
matt-noonan
8y ago
You can make C++ types that depend on constant values computed at compile-time, but this isn't the same as dependent types. In a hypothetical dependently-typed C++, I would be able to do this: template <typename T, int N> s
51.
▲
by
matt-noonan
8y ago
Can you elaborate on the DT / QuantifiedConstraints connection a bit? I haven't thought enough yet about QuantifiedConstraints to see the everyday benefits, but I'm getting contact-excited by everybody else's anticipatio
52.
▲
by
matt-noonan
9y ago
To me, parametric polymorphism is much nicer for reasoning about a program locally / modularly. It's kind of like reasoning about a function with linear control flow vs reasoning about a function with lots of nested if/elses.
53.
▲
by
matt-noonan
9y ago
Actually, I'd expect Go to work really well! Not if you tried to generate C code that compiles to a given Go binary, of course. But that's not what you'd do. Instead, you'd use the Go compiler as the black box, and learn
54.
▲
by
matt-noonan
10y ago
Oh, but you can! Check out ein-mode: https://tkf.github.io/emacs-ipython-notebook/