Isomorphisms, hylomorphisms and hereditarily finite data types in Haskell (original) (raw)

2009, Proceedings of the 2009 ACM symposium on Applied Computing

This paper is an exploration in a functional programming framework of isomorphisms between elementary data types (natural numbers, sets, multisets, finite functions, permutations binary decision diagrams, graphs, hypergraphs, parenthesis languages, dyadic rationals, primes, DNA sequences etc.) and their extension to hereditarily finite universes through hylomorphisms derived from ranking/unranking and pairing/unpairing operations. An embedded higher order combinator language provides any-to-any encodings automatically. Besides applications to experimental mathematics, a few examples of "free algorithms" obtained by transferring operations between data types are shown. Other applications range from stream iterators on combinatorial objects to self-delimiting codes, succinct data representations and generation of random instances. The paper covers 59 data types and, through the use of the embedded combinator language, provides 3540 distinct bijective transformations between them. The self-contained source code of the paper, as generated from a literate Haskell program, is available at http://logic.csci.unt.edu/tarau/ research/2008/fISO.zip. A short, 5 page version of the paper, published as [1] describes the idea of organizing various data transformations as encodings to sequences of natural numbers and gives a few examples of hylomorphisms that lift the encodings to related hereditarily finite universes.