LANGUAGES Signal 124
Tutorial demonstrates creating Escher-style tessellations using Haskell diagrams and Rasterific backend
Illustration only Photo by omid roshan on Unsplash
The article walks through building a parallelogram tile with custom curve sides and rendering it to PNG.
It shows how Haskell’s type-safe diagram primitives can be used to generate repeatable geometric patterns, which is useful for programmatic graphics pipelines. Engineers can leverage the OverloadedRecordDot syntax and Trail' types to keep code concise while ensuring closed shapes at compile time. The example also demonstrates exporting the result with the diagrams-rasterific backend, a common path for producing raster images from Haskell code.
Written by elseif from the cluster below · every claim links back to a sourceThe three things worth knowing
Uses the diagrams library’s Trail' types to define open curve sides of a tile.
Employs OverloadedRecordDot syntax for concise record field access.
Renders the resulting tessellation to PNG via the diagrams-rasterific backend.
THE READ
What the cluster adds up to.
The post introduces a step-by-step tutorial for recreating an Escher-style tessellation with the Haskell diagrams library. It starts by defining a ParallelogramTile record that stores two open curves, firstSide and secondSide, each typed as Trail' Line V2 a. The OverloadedRecordDot extension lets the code refer to these fields with dot notation, simplifying the construction of the tile data structure.
A makeBoundary function combines the two sides and their reversals, then closes the line to produce a Trail' Loop V2 Double. The type system distinguishes open (Line) from closed (Loop) trails, guaranteeing that the boundary is a proper closed shape before any fill or rendering occurs. This compile-time safety helps avoid runtime geometry errors when assembling tiles.
Curves for the tile edges are generated with cubicSpline, which takes a Boolean flag for closure and a list of 2-D points. The article notes that insufficient sample points can cause the spline to “get completely out of control” and produce bizarre shapes, but adding more points fixes the issue. This highlights the practical need to provide adequate control points when modeling complex outlines.
To produce a visual output, the tutorial uses the diagrams-rasterific backend, requiring the diagrams-rasterific library to be installed. The Raster module is imported and later used to render the constructed diagram to a PNG file, demonstrating a complete pipeline from geometric description to raster image. This backend choice is common for Haskell projects that need bitmap exports.
Adopting the approach requires installing the diagrams core library, the rasterific backend, and understanding the Trail' API and cubic spline construction. It also assumes the user can extract point data from reference artwork, as the example does with Inkscape measurements. The method works for planar, non-overlapping tiles; if the generated curves intersect, the tessellation will not tile the plane correctly, limiting its applicability to well-behaved, non-self-crossing shapes.
Written by elseif from the cluster below · checked for specifics the sources never containedTHE CLUSTER