Eduardo Rafael
eduardorfs.com
Eduardo Rafael
@eduardorfs.com
26yo anti floating point developer. You can almost always find me at http://twitch.tv/eduardorfs, it's the boring side of tech.
Similarly but simpler than distilling optimality, you can distill Weak CBV from a Strong CBV interpreter + explicit laziness. In such a scenario, you can see that beta + force is equivalent to a single beta in the weak setting.
September 11, 2025 at 8:55 PM
I'm thinking on tools to reason about optimizations and as always, code is king. This is a nice way of thinking about it.
September 6, 2025 at 7:51 PM
Status Report 5:

Very WIP, my understanding of induction / dependent elimination is starting to lead to novel result.

The following allows you to derive induction, this is the first result that I have that when done correctly doesn't necessarily implies an irrelevant equality.
September 3, 2025 at 5:19 PM
Just go and disable smooth scrolling. It's just better.
March 10, 2025 at 5:02 PM
This feels like a general technique for decomposing self down. Here I'm relying on internal expansion of fixpoint but it's truly not needed.

If my intuition is right, I should publish this.
March 9, 2025 at 8:20 PM
I think this one is well typed. A proof of induction for the booleans extracted, using sigma + identity + mutual recursion.

I'm not sure if it leads to self, as it may not be general enough, but I'm still working on it.

Note, this is compatible with HoTT.
March 8, 2025 at 4:22 PM
This is a nice intrinsically typed version of intersection types. I was really looking for something like this to study it in the presence of proof and computationally relevant types.
February 23, 2025 at 3:33 PM
A different way of constructing a dependent type theory, we start with an OCaml-like unification theory.

To make it second order you just add support for rank-n poly.
February 11, 2025 at 1:05 AM
My current formation for self types requires internal expansion of fixpoints, but there is a class of problems using only eta that is decidable and still provides with the desirable properties.

I've been slowly building confident that this is compatible with HoTT but it's easy to make mistakes.
December 28, 2024 at 11:17 PM
Self types must be on the right side of a fixpoint, it may be under a lambda or pair tho, so what happens when you try to initialize and destruct a fixpoint on the same pattern with a self?

Well, it actually, works and is not really a special case.
December 28, 2024 at 11:12 PM
Two things, I do streams on twitch daily, mostly working on my own programming language called Teika.

And, it's that time of the year where bro's should be mustache maxxing, so let's fucking goo.

Link below.
December 26, 2024 at 6:32 PM
Because I have dynamically sized unboxed types, I can have unboxed closures.
December 26, 2024 at 2:37 AM
This is cute
December 26, 2024 at 1:42 AM
Sharing a currently old idea, but because I have an unboxed kind, I don't need tuples anymore, unit + pairs is enough.

This is a simple trick, but this unlock recursive unboxed types and it is one of the most important ideas that I had this year.
December 25, 2024 at 2:49 AM
I'm liking the Scala syntax for call-by-name.
December 21, 2024 at 10:59 PM
This is actually an interesting feature, it doesn't allow pattern matching as there is no tag, but it's nice to be able to extract things from types naturally.
December 20, 2024 at 1:41 AM
A cool feature of only having types through patterns is that the self type can be implicit.
December 19, 2024 at 6:53 PM
Ascriptions before patterns and expressions is better but none of you are ready for this.
December 19, 2024 at 3:49 AM
This is a real problem in the presence of higher-order unification and let aliases.

Interesting enough, storing the original type is very important for error messages.
December 19, 2024 at 3:42 AM
Another idea that I forgot to share, an integration between the formatter and the typer. Whenever you see a type clash, add the typer for the user such that it is easier to find what is the type of each stuff.

Of course, this requires good heuristics, people will want to disable it.
December 19, 2024 at 2:34 AM
There is one place where Teika evaluates right-to-left and I will never tell anyone, but, it is almost always a pure expression and if it's not a pure expression it gives you a warning(error by default).

This debug will print "hello world". I think it would be possible to make it left-to-right tho.
December 18, 2024 at 11:38 PM
My tip to make very fast compilers, make a bytecode that can be traversed both ways, strong evaluation will produce the bytecode like in a Quine, the equality function will run the bytecode in reverse.
December 18, 2024 at 8:34 PM
Hmm you should be able to extract the commutativity of lets in a CPS setting from parametricity.
December 18, 2024 at 2:07 AM
Yup, types are in my blood.
December 18, 2024 at 1:33 AM
December 18, 2024 at 1:11 AM