thunderseethe
thunderseethe
@thunderseethe.dev
There's a neat bonus post included because I realized I need to rewrite type inference to support the full compiler 🥹
November 12, 2025 at 2:48 PM
It also ties into the Handle (previously Claim) work: smallcultfollowing.com/babysteps/bl...
The Handle trait · baby steps
smallcultfollowing.com
October 7, 2025 at 8:35 PM
I cant wait for them to update the book. I waste so much time reading through the proc macro source to figure out how the new salsa works. Interned structs now have a 'db lifetime. Guess who fixed up their whole codebase before realizing they also have a `no_lifetime` attribute 😭
October 3, 2025 at 4:16 PM
That's a fair clarification. I shouldn't say easy to box anything, but easy to copy anything.
September 25, 2025 at 5:53 PM
Usually it means the payload of the Sum type is laid out adjacent to the discriminate, rather than behind a pointer. A lot of languages autobox sum type payloads because it makes layout easy. An enum is always a discriminant and a pointer
September 25, 2025 at 5:22 PM
Swift! Sort of. It will layout sum types unboxed, but it's very easy to accidentally box anything in Swift, if you hold it wrong.
September 25, 2025 at 5:04 PM
No you don't understand. My Rust isn't gonna have a borrow checker. Instead, it'll have something that does 80% of what a borrow checker does and is memory safe 80% of the time. We trust programmers to handle the 20% safely
September 19, 2025 at 6:15 PM
I love to hear that! But it doesn't do a great job actually explaining ML modules. It's mostly about how we keep reinventing ML module-like features because folks are intimidated by ML modules
September 6, 2025 at 8:38 PM
Could be one of a couple things:

1) ml structs and signatures add verbosity (over "normal" modules)
2) applying functors explicitly everywhere
3) excessive proliferation of type sharing constraints
September 6, 2025 at 8:20 PM
Its crazy how much syntax sugar WAT has for a target that is for the most part only ever generated (either from wasm, or from a compiler). Also crazy how the sugar is mostly undocumented. I didn't discover WAT could nest expressions until I saw `wasmprinter` has a fold instructions option
September 2, 2025 at 2:53 PM
I've never needed it, so quite possible you just don't. Maybe it's helpful when `<array>` is a compound expression and you don't want to have to let bind it. I could see that if the map was in the middle of an iterator chain
August 30, 2025 at 2:39 PM
A caveat is that I'd only recommend the 10in+ models and only if your usecase is reading/writing PDFs. If you're looking for a more typical epub usage, their smaller models are pricey and more than what you need. I hear good things about Kobo in that space and that they support sideloading via USB
August 27, 2025 at 5:47 PM
I've really enjoyed Boox, they're pricey but run android so you can do whatever on them and aren't locked to any store. Folks have mentioned durabilityissues but I haven't experienced that personally and I've dropped them on concrete.
August 27, 2025 at 5:45 PM
Its like they wanted the veneer of a modern feature set but at every fork in the road they veered towards C. I am quite biased though
August 25, 2025 at 3:12 PM
Swift is the poster child of this for me. We'll give you enums but only a switch statement, no switch expression. Years later we'll add half a switch expression that's only allowed in specific positions and no one will use it because "explicit switch statements are more readable" 😩
August 25, 2025 at 3:10 PM
I would expect A in a lazy or strict language but would expect optimizations to float the let in a lazy lang (or a strict languages if launchMissiles() is side effect free somehow)
August 25, 2025 at 2:56 PM
Does this mean datalog is about "and" and "or" or "and" or "or"
August 13, 2025 at 3:39 PM
But the main idea is that modules have a concept of a typed hole and you can mix two modules together to fill each other's holes. This allows for a low friction combining of modules in a kind of duck-tyoed fashion where two modules mix when the types line up
August 12, 2025 at 8:52 PM
people.mpi-sws.org/~rossberg/mi... is the seminal paper on it. But I don't love how it only covers generative functors.

plv.mpi-sws.org/backpack/ covers a system with applicative modules but is overly tied into Haskell's existing module system.
MixML - Mixin' Up the ML Module System
Be declarative. Be functional. Just be.
people.mpi-sws.org
August 12, 2025 at 8:50 PM
Mixin Modules 🥺
August 12, 2025 at 7:38 PM
It's a downer. I believe you can recover the commutativity with dynamic label generation. Then each effect has a unique name and disjointedness comes for free. A very heavy handed solution though
August 12, 2025 at 3:09 AM
This looks to be a link to Gat example that breaks cycle checking. I see what you're saying though. Infinite types are still allowed under `Ind<T: Sized>` if the field is a `Box<T>`.
July 28, 2025 at 7:27 PM