Julian Hyde
banner
julianhyde.bsky.social
Julian Hyde
@julianhyde.bsky.social
On a mission to tame data. (Ex-Google, always ASF, working on something new.)
Morel is now in Rust! I just made the first release of the new Rust toolchain for Morel. Morel-Rust implements same language as Morel-Java. It's early days, but potentially performance will be much better.

blog.hydromatic.net/2025/10/23/m...
October 23, 2025 at 7:23 PM
I think I have found a way to remove aggregate functions from Morel. They become ordinary functions applied to the collection of elements gathered by the "group" operator (or a query on those elements if you want to pre-filter). github.com/hydromatic/m...
Syntax for aggregate functions · hydromatic morel · Discussion #292
In SQL, aggregate functions are not even functions. A function takes an argument and returns a result, and SQL's aggregate functions are applied to a collection that is implicitly created for each ...
github.com
June 22, 2025 at 8:25 PM
I'm pleased to announce release 0.7 of Morel! This is a huge release, adding support for ordered/unordered data, set operators, and revised order syntax. A major rework of Morel's type inference algorithm delivered function overloading. blog.hydromatic.net/2025/06/08/m...
Morel release 0.7.0
I am pleased to announce Morel release 0.7.0, just one month after release 0.6.0.
blog.hydromatic.net
June 9, 2025 at 4:42 AM
Database tables are unordered, but functional programming languages work best over ordered lists. Which should Morel prefer? Both! We now have "list" and "bag" types, and full relational algebra over both. blog.hydromatic.net/2025/06/06/o...
Ordered and unordered data
Despite what the relational model says, some data is ordered.
blog.hydromatic.net
June 7, 2025 at 1:08 AM
Be honest, did you ever find a real-world use for SQL's "INTERSECT ALL" operator? Now we did! This post explains how you can use Morel's "intersect" to compute GCD (greatest common divisor). blog.hydromatic.net/2025/06/03/i...
INTERSECT ALL, EXCEPT ALL, and the arithmetic of fractions
SQL’s INTERSECT ALL and EXCEPT ALL operators rarely get attention, but they elegantly solve a classic math problem. The problem is computing the greatest common divisor (GCD) and least common multiple...
blog.hydromatic.net
June 4, 2025 at 3:40 AM
Am I the only one who uses this git trick? To split a commit (in this case a8aee880), include it twice in the rebase script with a b (break) step in the middle. When rebase pauses, revert the parts of the commit that you don't want. They will be applied in the next commit.
June 3, 2025 at 7:59 PM
Is it possible to do serious programming (such as solving Wordle) in a query language? If not, what's missing? The video of my DataCouncil talk is posted. www.youtube.com/watch?v=xwFs...
More Than Query Future Directions of Query Languages, from SQL to Morel
YouTube video by Data Council
www.youtube.com
June 3, 2025 at 7:58 PM
OK, I merged ordered/unordered queries. Next, an "unorder" step and an "ordinal" expression, so that you can more easily convert between lists and bags.
I'm getting ready to merge a big new feature to Morel - ability to query unordered data sets (bags, and database tables), ordered data sets (lists), and hybrid queries that mix the two. I'd appreciate feedback on whether the specification is clear. github.com/hydromatic/m...
Ordered and unordered queries · Issue #273 · hydromatic/morel
In SQL, tables are inherently unordered, and query results remain unordered until explicitly sorted with an ORDER BY clause. In contrast, functional programming languages like Standard ML -- and by...
github.com
May 22, 2025 at 11:24 PM
I'm getting ready to merge a big new feature to Morel - ability to query unordered data sets (bags, and database tables), ordered data sets (lists), and hybrid queries that mix the two. I'd appreciate feedback on whether the specification is clear. github.com/hydromatic/m...
Ordered and unordered queries · Issue #273 · hydromatic/morel
In SQL, tables are inherently unordered, and query results remain unordered until explicitly sorted with an ORDER BY clause. In contrast, functional programming languages like Standard ML -- and by...
github.com
May 21, 2025 at 6:52 PM
I started a discussion about supporting SQL Pipe syntax in
Apache Calcite. Please chime in. lists.apache.org/thread/1ggd3...
lists.apache.org
May 19, 2025 at 5:54 PM
Should Morel be rewritten in Rust? The Rust data community is compelling, but moving to Rust might cause us to lose focus on Morel's bigger goals. I ponder the question in a blog post. blog.hydromatic.net/2025/05/11/r...
Should Morel be rewritten in Rust?
There are many excellent and innovative projects happening in the Rust data ecosystem. I am frequently asked whether Morel should be one of them. Thinking about this question gave me some insights int...
blog.hydromatic.net
May 12, 2025 at 2:20 AM
I'm pleased to announce release 0.6 of Morel, just 2 months after 0.5. The release adds 'forall', 'exists' and 'implies' keywords for logic programming, 'with' for easy record updates, and a tabular output mode to the shell. blog.hydromatic.net/2025/05/02/m...
blog.hydromatic.net
May 3, 2025 at 7:00 AM
This query is supposed to find all employees in dept 10 who earn more than all programmers in dept 20, but it has a bug. The bug is caused by a fatal flaw in SQL.

What is that flaw, and how does Morel fix it? (The answer is in my talk with @julien.ledem.net, youtu.be/zpdbEvhhne8#...)
May 1, 2025 at 8:58 PM
"More than Query - Future Directions of Query Languages, from SQL to Morel", a conversation with @julien.ledem.net about Morel, based on the talk I gave at Data Council 2025. www.youtube.com/watch?v=zpdb...
More than Query - Future Directions of Query Languages, from SQL to Morel
YouTube video by Julian Hyde
www.youtube.com
May 1, 2025 at 2:10 AM
Announcing Quidem release 0.12! A query recorder, multi-line strings in "!set" commands, and upgraded dependencies. github.com/hydromatic/q...
github.com
April 28, 2025 at 5:49 PM
Thanks to all who came to the talk, and the great questions afterwards. As always at Data Council, the hallway conversations are interesting and inspiring.

Here are my slides. (For best results, click 'download raw file', and then open the PDF.) github.com/julianhyde/s...
April 24, 2025 at 1:02 AM
Tomorrow at Data Council I'll talk about how to solve optimization problems in Morel. If banana cakes sell for $4, chocolate cakes sell for $4.50, and you have a certain amount of ingredients, how many of each kind of cake do you make to maximize profit?
April 23, 2025 at 8:33 AM
Who's in Oakland this week for Data Council?
April 21, 2025 at 11:34 PM
Until last week, I hadn’t thought much about DML in Morel. I assumed that we would just add commands analogous to SQL’s INSERT, UPDATE, DELETE commands. But I devised some language extensions that I think fit Morel and modern data engineering workflow better. blog.hydromatic.net/2025/04/14/d...
DML in Morel
Until last week, I hadn’t thought much about DML in Morel. I knew we would support DML, of course, but I had assumed that we would just add commands analogous to SQL’s INSERT, UPDATE, DELETE commands.
blog.hydromatic.net
April 15, 2025 at 12:29 AM
I've created a VSCode plugin for Morel. Very basic at this point, but I'd welcome any improvements. github.com/hydromatic/v...
March 28, 2025 at 6:02 PM
Wordle 1,370 6/6*

🟨🟨🟨🟨⬜
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩

Ugh
March 20, 2025 at 7:23 PM
When you start a project (say Maven or Gradle) do you start minimal and add enforcers (linters, code formatting, code coverage) later? Or enable all the enforcers on day one?

Feel like I'm a grumpy old man saying "If you won't take your shoes off I don't want you in my house".
March 17, 2025 at 7:22 PM
In Morel you can browse the type system, and create data frames from the files in it, as if it were statically typed. What's the trick? Progressive types. blog.hydromatic.net/2023/12/31/f...
File reader and progressive types in Morel version 0.4
<!– This post started as a script for a screencast.
blog.hydromatic.net
March 12, 2025 at 12:49 AM