Sign in

Basile Henry

@basilehenry.bsky.social
24 followers 48 following 66 posts

I like making games, learning about type theory and hacking on hardware. I'm also passionate about food and coffee! ☕ he/him

PostsRepliesMedia
Basile Henry @basilehenry.bsky.social · 06/10/2026
congressional oversight oversight? 🤔
000
Basile Henry @basilehenry.bsky.social · 30/09/2026
Technically true 😅 Not the usual framing...
000
Basile Henry @basilehenry.bsky.social · 17/09/2026
It's subagents all the way down... 🤖
011
Basile Henry @basilehenry.bsky.social · 12/08/2026
One of my favourites is let-with precedence 😅
nix-repl> let x = 2; in with { x = 3; }; x
2
140
Basile Henry @basilehenry.bsky.social · 26/07/2026
The front of the car doubles up as a crumple zone to make the car safer in a crash, so you don't want it to be too short for safety reasons
150
Basile Henry @basilehenry.bsky.social · 14/07/2026
Not a recommendation because I haven't properly tried it yet (although I've been meaning to for a while), but maybe of interest to you: PRR danobi.github.io/prr/index.html
danobi.github.io
Introduction - prr
020
Basile Henry @basilehenry.bsky.social · 11/07/2026
My main use case for the either crate is to return an impl Iterator 😅
000
Basile Henry @basilehenry.bsky.social · 04/07/2026
Good question! I have never tried PR stacking across forks, and it very well might not be supported by GitHub 🤔 Hopefully they think about that use case in their upcoming tool/ui updates 🤞
010
Basile Henry @basilehenry.bsky.social · 04/07/2026
Combined with `git rebase --interactive --update-refs` (jj is probably even better), I can move commits between PRs, or add/remove commits halfway down the stack quite easily 😊
000
Basile Henry @basilehenry.bsky.social · 04/07/2026
Right, with my suggested workflow (that I/my coworkers have been using for a while) "the first N commits are actually from another PR" is not true, each PR only shows the commits and diff for that PR. Each PR "targets" the previous PR instead of main, but only gets merged if/when it targets main 😊
200
Basile Henry @basilehenry.bsky.social · 04/07/2026
The part that confused me is that GitHub already lets you do stacked PRs 🤔 If you set the base branch of each PR to the previous PR in the stack, it'll even change the base to main automatically after the previous PR gets merged. Looks like the UI might get improved: github.github.com/gh-stack/
github.github.com
GitHub Stacked PRs
Break large changes into small, reviewable, stacked pull requests with first-class GitHub support.
100
Basile Henry @basilehenry.bsky.social · 03/07/2026
I thought update-refs was the missing piece for your stacked PR workflow, but maybe it's on the GitHub/other side? 🤔
100
Basile Henry @basilehenry.bsky.social · 03/07/2026
You might be interested in `git rebase --update-refs` if you don't already know about it. Very useful to rebase a stack of PRs 😊 git-scm.com/docs/git-reb...
git-scm.com
Git - git-rebase Documentation
100
Basile Henry @basilehenry.bsky.social · 02/07/2026
There are multiple tools that do it automatically with different trade offs (you probably already know). I found crate2nix works fairly well on a big monorepo with many crates. Good luck with the non-nix option! I'm also interested 😊
100
Basile Henry @basilehenry.bsky.social · 02/07/2026
nix does that! *hides*
100
Basile Henry @basilehenry.bsky.social · 26/06/2026
return void 🤔 But to your point, isn't that what protected does compared to private? Or is there another use case for it? (I haven't used one of the OOP lang in a while...)
100
Basile Henry @basilehenry.bsky.social · 25/06/2026
Basically "en passant" 😅
010
Basile Henry @basilehenry.bsky.social · 03/06/2026
flakeless but still pinned? 😅 I definitely still have a bunch of niv based repos...
020
Basile Henry @basilehenry.bsky.social · 26/05/2026
But if you put it as the last argument you get to use the "reader" monad instance: `Monad ((->) r)` so you can pass around the continuation silently and look smart 🤓
110
Basile Henry @basilehenry.bsky.social · 21/05/2026
The data structure: `Maybe a` 😅
010
Basile Henry @basilehenry.bsky.social · 07/05/2026
A while ago I made one which gave semantics to git conflict markers 😈
040
Basile Henry @basilehenry.bsky.social · 06/05/2026
One tool call that amazed me a while ago went something like `print "y\ny\nn\ny\nn\n" | git add -p` 😅
030
Basile Henry @basilehenry.bsky.social · 06/05/2026
Sounds similar to what antithesis does under the hood as described on the Signal and Threads podcast 🤔
010
Basile Henry @basilehenry.bsky.social · 06/05/2026
Right 👍 So the minimal feature that makes row polymorphism is the ability to write code generic on the rest of the fields that your function doesn't care about? In a monomorphising compiler that would give you one type per unique record 🤔
000
Basile Henry @basilehenry.bsky.social · 06/05/2026
I think row polymorphism let's you add (and sometimes remove) fields from a generic record: { r } -> { r | a: T } But most of the time you don't actually need this
100
Basile Henry @basilehenry.bsky.social · 05/05/2026
Fair! I thought maybe they'd release their weights and the differences would show up on most inputs to give such a different error rate. Sometimes you can also witness differences on random weights, but then you don't really know if they matter as much once trained
000
Basile Henry @basilehenry.bsky.social · 05/05/2026
So it was a CPU vs GPU issue 😅 bsky.app/profile/basi... At least it wasn't something as subtle as f32 operations aren't commutative and different platforms compute in different order 🙃
100
Basile Henry @basilehenry.bsky.social · 03/05/2026
I'd be interested to see pytorch on the CPU 🤔
000
Basile Henry @basilehenry.bsky.social · 19/04/2026
That is pretty messed up 🤯 So if you go sail around the world you better be back under 3 years?
100
Basile Henry @basilehenry.bsky.social · 19/04/2026
In all seriousness, I don't know anything about boat VAT in the EU and I understand it might be messed up even if you don't own/plan on owning one 🤔
100
Basile Henry @basilehenry.bsky.social · 19/04/2026
Why do you care about VAT on boats if you don't have any? 😅
100
Basile Henry @basilehenry.bsky.social · 18/04/2026
Is that... one of the rare use cases for a bloom filter? 🤔
110
Basile Henry @basilehenry.bsky.social · 07/04/2026
Maybe you could have a go to definition for the impl function itself go to the class definition? 🤔 So from any use site you're one hop away from 2) and two hops away from 1)
020
Basile Henry @basilehenry.bsky.social · 29/03/2026
I'm pretty sure there will always be something more useful to spend the energy on, even if highly inefficient, like desalination 🤔
000
Basile Henry @basilehenry.bsky.social · 16/03/2026
With Nat you can encode constraints without extra comparison support: head :: Vec (n + 1) a -> a But if you support comparison constraints I think this is nicer to use in practice anyway: head :: (1 <= n) => Vec n a -> a
041
Basile Henry @basilehenry.bsky.social · 05/03/2026
Is that because for B you could take a reference to b.1 and the layout has to match (u8, u16)? 🤔
110
Basile Henry @basilehenry.bsky.social · 18/02/2026
You could learn Haskell while employed: myrtle.ai/about/careers/ 😄 We use Rust, Haskell, nix (and Python, Verilog, ...) for compilers and customs FPGA circuits
myrtle.ai
Careers
We are always looking for brilliant minds to join our team. If you have experience in Computer Science, Maths, or ML, we’d love to hear from you!
030
Basile Henry @basilehenry.bsky.social · 08/02/2026
So maybe we should be vibe coding in C to be consistent in our use of UB throughout the abstractions 😅
010
Basile Henry @basilehenry.bsky.social · 19/01/2026
Probably a rhetorical "what" 🤔 It basically says that `[a]` is equivalent to a function `Int -> a`. It's effectively the indexing function. If you want to set a value in the "array", you create a new function that checks if the input is the index you're setting and use the old function otherwise.
020
Basile Henry @basilehenry.bsky.social · 17/12/2025
Lots of GADTs when writing Clash Haskell 😭 clash-lang.org
clash-lang.org
Home
010
Basile Henry @basilehenry.bsky.social · 10/12/2025
"Linux in the Kernel" 👀 How dare they! 😅
090
Basile Henry @basilehenry.bsky.social · 09/12/2025
That is a pretty bad error message 😅 I assumed the Generic instance was a given and was already reaching for orphan instances to explain the lack of import bsky.app/profile/basi...
000
Basile Henry @basilehenry.bsky.social · 09/12/2025
Maybe you're also supposed to derive Generic for that type in the shame module (so it's not an orphan instance), and that would force you to add the import 🤔
000
Basile Henry @basilehenry.bsky.social · 09/12/2025
Ouch 😬 That would make sense to me for TemplateHaskell generated code, but for this type of instance deriving/default impl it feels like the extension should manage its own imports 😅
100
Basile Henry @basilehenry.bsky.social · 08/12/2025
M1 not in scope is weird 🤔 missing a language extension?
110
Basile Henry @basilehenry.bsky.social · 30/11/2025
I don't know how much AI they ended up using, but watching some of their dev talks a while ago they had some really impressive procedural generation using advanced ML techniques (i.e. AI), it really didn't strike me (at that time) like the plagiarism machine you hear about in more recent game dev 🤷‍♂️
010
Basile Henry @basilehenry.bsky.social · 24/11/2025
Nice example! 😊
010
Basile Henry @basilehenry.bsky.social · 24/11/2025
I mean yeah theoretically 😅 It's a practical approach, and I'm struggling to find ways to exploit it to create a function that would do radically different things for different types 🤔 There might be some tricks where you detect the type using broken `==` for NaN, but that's also the case in Haskell
110
Basile Henry @basilehenry.bsky.social · 24/11/2025
I think it might depend if you have "magic" (no constraints) type classes à la Elm for things like `==`, `+`, or `>=` 🤔
110
Basile Henry @basilehenry.bsky.social · 18/11/2025
That's probably the most reliable method (especially since the source path could be generated from nix)! I guess I'm not trusting my AI enough to do the run build step for me yet 😅
010