Fun to consider how to use these for type checking. I hope to spend a lot more time reading more on this. Love that one of the linked papers has exercises in the appendix.
Fun to consider how to use these for type checking. I hope to spend a lot more time reading more on this. Love that one of the linked papers has exercises in the appendix.
Although, what parts of Elixir itself are rough or missing creature comforts? I generally feel it's stable and fine, but I admittedly haven't written Elixir code in a couple of years, sadly.
The idea that Phoenix is also mostly macros does not hold in practice. Last time this came up, I believe less than 5% of Phoenix' public API turned out to be macros. You get this impression because the initial skeleton it generates has the endpoint and the router, which are macro heavy, but once you start writing the actual application logic, your context, your controllers, and templates are all regular functions.
I only have one question and it's not a very important one; the name.
Why is it "tidewave" and not "tidalwave"? That just sounds wrong. (Told you it wasn't important :D )
EDIT: I think I might have answered my own question, there's another AI mortgage payment tool already called Tidalwave. I guess this saves confusion.
I've been loving Tidewave MCP since the day it launched and I wish I had that for all my work. I also fight the pain of driving web browsers through the playwright MCP every day, and while it's a huge help, it's also massively slow and kills my context window.
I want these problems solved. But I want them solved in a way that isn't unique to one stack, because I don't have the luxury of sticking to my preferred Elixir stack all the time. I also want them solved in a way that doesn't force me to take a huge backward step in my AI usage by bypassing my all-you-can-eat Max subscription.
The $10 subscription isn't that expensive, but then again, since this isn't a complete solution, it's going to be on top of other subs like Cursor/Max/Phoenix.new etc etc and it becomes death by a thousand cuts.
Maybe I just need to calm down a bit and not look at it as all-or-nothing.
Like, sure, switching to this full-time would be impossible. But maybe as a tool in my toolbox, where I pay $10 and use it once-in-a-while, when I have a tricky thing to do and it's worth me burning $10-20 on API tokens just to unblock me.
I'm just concerned that software development is fast becoming pay-to-play / pay-to-win, and that can quickly lead to chickenization, where prices are carefully titrated to shift most of the value to the tool providers.
We've seen this play out in infrastructure and tooling, and most orgs now "donate" a huge chunk of their profit margins to AWS.
``` type lazy_bdd() = :top or :bottom or {type(), constrained :: lazy_bdd(), uncertain :: lazy_bdd(), dual :: lazy_bdd()} ```
(where the members are `lazy_bdd()` instead of `bdd()`?)