Vanessa McHale
blog.vmchale.com · Personal blog · on HN since 2017
Vanessa McHale writes about functional programming, covering Haskell, ATS, J and APL, x86 assembly and SIMD performance.
What HN saysHN commenters recommend her ATS posts for language and performance detail, and cite her Haskell post as rebutting the claim that it is too hard.
19HN people shared it
5linked it in comments
17stories submitted
307story points
2 years agolast shared
2017people per year2026
Most-shared posts
- 1Type-Safe Pointers in ATS3 people · 82 points · first shared 2020 · 8 comments on HN
- 2Outperforming Rust with Functional Programming2 people · 21 points · first shared 2017 · 5 comments on HN
- 3Why Haskell Is Good2 people · 4 points · first shared 2018 · discussion on HN
- 4A Proper x86 Assembler in Haskell Using the Escardó-Oliva Functional1 people · 90 points · first shared 2025 · 19 comments on HN
- 5C is not suited to SIMD (2019)1 people · 89 points · first shared 2025 · 120 comments on HN
- 6Adequate J Matrix Performance1 people · 4 points · first shared 2021 · discussion on HN
- 7Logic Programming Doesn't Work in the Real World1 people · 4 points · first shared 2024 · discussion on HN
- 8Practical ATS1 people · 4 points · first shared 2017 · discussion on HN
- 9ATS as a Systems Programming Language / Rust1 people · 2 points · first shared 2018 · discussion on HN
- 10Calling System Functions in a JIT1 people · 2 points · first shared 2024 · 1 comments on HN
- 11Python Is Dynamically Typed1 people · 1 points · first shared 2025 · 1 comments on HN
- 12Computing Catalan Numbers Using Dynamorphisms1 people · 1 points · first shared 2017 · discussion on HN
- 13Testing Is Orthogonal to Correctness1 people · 1 points · first shared 2025 · discussion on HN
- 14J One-Liners1 people · 1 points · first shared 2021 · discussion on HN
- 15Polyglot Is the Fastest Code-Counting Tool Available1 people · 1 points · first shared 2018 · discussion on HN
What HN people wrote when they linked it
vmchale · 2021-10-27
> it becomes easier to shoot yourself in the foot (which is mentioned in the alternative title, but doesn't seem to be expanded on much) -- say, by closing a Handle
lazy I/O (such as file reads) is suspect and even bad, but laziness + IO (or something like it) is a great way to stream from an API: http://blog.vmchale.com/article/lazy-io
Makes it possible to transcode for one. Basically makes streaming "compose" nicely - bzip2 and lzip otherwise have very different ways of streaming! And one would have to line a lot of things up.
dan-robertson · 2021-08-17
Vanessa McHale has a great set of blog posts about ATS. They touch on technical aspects of the language and it’s type system as well as practical aspects and real-world performance of compiled programs. The list is here:
http://blog.vmchale.com/category/ATS
If you click the ‘next’ link a few times you can go through several pages to earlier posts that introduce the language.
ghostwriter · 2020-06-06
> What kind of project would be a sweet spot to ATS?
I'd say a large mission-critical C codebase that decides to grow and expand a formally-verified kernel of its most important functionality - it can be a real-time sytem, an OS kernel, a HFT algorithm etc.
Nowadays people seem excited about gradual typing in widespread dynamic languages like JavaScript and Python, because it allows them to adopt the best parts of static typing without having to rewrite the entire codebases in new langauges. Now imagine that you can introduce gradual formal verification to your battle-tested C codebase, without a loss in performance[1] and without forcing you into a new tooling ecosystem (compiler, debugger, profiler etc). Actually, you don't need to imagine it, because that's what ATS is :)
> I would love to understand the nature of the theoretical advantage ATS has here over Rust.
I'd say it's a synergy of two key features, that produce miracles when put together - 1) direct and safe pointer arithmetics [2], which enables the same data structures and optimisation tricks available in C, yet in a verifiable environment, and 2) refinement types [3].
> Would it be comparible with F*
Unfortunately, I don't know much about F*, MS Research regularly releases a new PL prototype after the other and I lost my count on Koka[4].
> ATS seems to be very much a concept/language in R&D phase. Its ergononics are difficult ergonomics (have a look at the error messages), documentation and example…
bear8642 · 2022-10-15
> Does it actually succeed though?
Not sure about J, but I feel APL certainly does, at least for me - the symbol set makes it very easy to sketch out a solution.
Part of that ease is the generality of the various operators. That is the reductions and cumulative prefix can be done with any function. For example ⌊\ as cumulative min - useful as Vanessa McHale shows <http://blog.vmchale.com/article/numba-why>
kspalaiologos also shows APL enabling mathematical understanding on her blog <https://palaiologos.rocks/>
An APL equivalent of the J is +\¯1 1[(?100⍴2)] although others exist as there's no exact equivalent for J's
{ - see <https://aplwiki.com/wiki/From>
lucasdicioccio · 2019-10-06
This comment misses the point of the article, which argues against a urban legend that Haskell is too difficult "unless you are this tall" (a Phd, an E.T., a superhuman). I also had a shot at explaining why people are already tall enough in a past short "comic strip" [0]. I think the article makes a good job re-assuring the urban legends are a myth.
Now. there are many reasons why one would want to use Haskell. For instance, to have fun, to understand better some pattern, to write expanding-brain memes, or, because they are good at solving problems with it. It is fine if your reasons do not intersect with other people's reasons. You can try finding answers whether Haskell matches your reasons in some other essays [1,2,3]. Maybe it is true for many people that their needs and desires are entirely covered with their own toolset. As a curious/optimistic person I find it incredibly pedant to say I'll never ever need to learn/use something (there's different goodness in everything).
Personally, practicing Haskell led me to appreciate the importance and trade-offs that occur when isolating/interleaving side-effects. Similarly, it gave me some vocabulary to articulate my thoughts about properties of systems. Both are super important in the large when you architect softwares and systems. There are other ways to learn that (e.g., a collection of specialized languages), but at least for me, Haskell helped me build an intuition around these topics. That said, the prevalence of…