🤖 AI Summary
To address miniKanren’s limitations in polymorphic unification, debugging support, and practical usability, this paper introduces Walrus—a functional relational programming language embedded in Haskell. Methodologically, Walrus integrates relational semantics with Haskell’s type system via (1) a polymorphic unification mechanism built on type families and GHC generics, enabling constraint-aware relational reasoning; (2) an on-demand lazy evaluation strategy that preserves logical completeness while ensuring computational efficiency; and (3) structured AST tracing and composable debugging interfaces, markedly improving observability of relational programs. Designed as a lightweight embedded DSL, Walrus seamlessly unifies functional and relational paradigms. Empirical evaluation in complex domains—such as bidirectional compilers—demonstrates its expressive power, maintainability, and extensibility, significantly reducing development and debugging overhead for relational programs.
📝 Abstract
We present Walrus, a functional relational programming language embedded in Haskell that extends the miniKanren model with type-polymorphic unification, on-demand laziness, and a range of usability features aimed at practical development. These include use of Haskell Generics for boilerplate reduction, structured debugging traces, and ergonomic support for product types. We describe the design and implementation of Walrus through the lens of our experience developing bidirectional compilers, and reflect on key design decisions and recurring usability challenges encountered in practice.