This is ... wild. Usually these things explode in size when compiled, require an external preprocessor, and/or heavily lean on system calls. This does none of those things.
Unfortunately none of the examples contain malloc, whilst I'm curious as to whether the pattern matching works with heap allocated object. The binary tree example only has statically defined tree, which blows up into lots of code in assembly.
So in this case the connection to algebraic data types is that they provide static type checking for unions as well as structs in C along with type introspection which is novel.
I wonder whether this interacts cleanly with Cello, GTK+, or other "object-oriented" C libraries. It certainly is a nice presentation, if a little baroque.