Difference between revisions of "Research papers/Functional pearls"

From HaskellWiki
Jump to: navigation, search
m (Reference added)
("Offline" section cleared; per-year ordering of "Online" section restored)
Line 30: Line 30:
  
 
Functional pearls online:
 
Functional pearls online:
 +
 +
;[https://www.cs.nott.ac.uk/~pszgmh/123.pdf It’s Easy As 1,2,3]
 +
:Graham Hutton. Journal of Functional Programming, 2021.
  
 
;[http://www.cs.ox.ac.uk/jeremy.gibbons/publications/proyo.pdf What You Needa Know about Yoneda: Profunctor Optics and the Yoneda Lemma]
 
;[http://www.cs.ox.ac.uk/jeremy.gibbons/publications/proyo.pdf What You Needa Know about Yoneda: Profunctor Optics and the Yoneda Lemma]
Line 105: Line 108:
 
;[http://dx.doi.org/10.1145/1411204.1411220 Generic Discrimination: Sorting and Partitioning Unshared Data in Linear Time]
 
;[http://dx.doi.org/10.1145/1411204.1411220 Generic Discrimination: Sorting and Partitioning Unshared Data in Linear Time]
 
:Fritz Henglein. 2008
 
:Fritz Henglein. 2008
 +
 +
;[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.8486&rep=rep1&type=pdf Undoing Dynamic Typing]
 +
:Nick Benton. 2008.
  
 
;[http://dx.doi.org/10.1145/1328438.1328445 Much Ado about Two: A Pearl on Parallel Prefix Computation]
 
;[http://dx.doi.org/10.1145/1328438.1328445 Much Ado about Two: A Pearl on Parallel Prefix Computation]
Line 137: Line 143:
 
;[http://wiki.di.uminho.pt/twiki/pub/Personal/Xana/WebHome/report.pdf Strong Types for Relational Databases]
 
;[http://wiki.di.uminho.pt/twiki/pub/Personal/Xana/WebHome/report.pdf Strong Types for Relational Databases]
 
:Alexandra Silva, Joost Visser. 2006. (Haskell Workshop)
 
:Alexandra Silva, Joost Visser. 2006. (Haskell Workshop)
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/3E79673B3E7EA223532194DFBFF69569/S0956796805005678a.pdf/functional_pearls_finding_celebrities_a_lesson_in_functional_programming.pdf Finding celebrities: A lesson in functional programming]
 +
:Richard Bird and Sharon Curtis. 2006.
  
 
;[http://okmij.org/ftp/papers/LogicT.pdf Backtracking, interleaving, and terminating monad transformers]
 
;[http://okmij.org/ftp/papers/LogicT.pdf Backtracking, interleaving, and terminating monad transformers]
Line 191: Line 200:
 
;[http://pages.cs.brandeis.edu/~mairson/Papers/jfp02.pdf Linear lambda calculus and PTIME-completeness]
 
;[http://pages.cs.brandeis.edu/~mairson/Papers/jfp02.pdf Linear lambda calculus and PTIME-completeness]
 
:Harry G. Mairson. 2004.  
 
:Harry G. Mairson. 2004.  
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/44A9D4F4D9AF0D8380D5E573E7E7F885/S095679680400512Xa.pdf/functional_pearl_on_tiling_a_chessboard.pdf On tiling a chessboard]
 +
:Richard Bird. 2004. ([http://portal.acm.org/citation.cfm?id=1030333.1030336 ACM])
  
 
;[http://www.lri.fr/~filliatr/ftp/publis/kr-fp.ps.gz Producing all ideals of a forest, functionally]
 
;[http://www.lri.fr/~filliatr/ftp/publis/kr-fp.ps.gz Producing all ideals of a forest, functionally]
Line 215: Line 227:
 
;[http://www.cs.nott.ac.uk/~gmh/wgp01/hinze-paper.pdf Haskell does it with class: Functorial unparsing]
 
;[http://www.cs.nott.ac.uk/~gmh/wgp01/hinze-paper.pdf Haskell does it with class: Functorial unparsing]
 
:Ralf Hinze. 2001.
 
:Ralf Hinze. 2001.
 
  
 
;[http://dx.doi.org/10.1017/S0956796801003914 Unfolding pointer algorithms]
 
;[http://dx.doi.org/10.1017/S0956796801003914 Unfolding pointer algorithms]
Line 231: Line 242:
 
;[http://www.brics.dk/RS/01/10/BRICS-RS-01-10.ps.gz Do we need dependent types?]
 
;[http://www.brics.dk/RS/01/10/BRICS-RS-01-10.ps.gz Do we need dependent types?]
 
:Daniel Fridlender and Mia Indrika. 2001.
 
:Daniel Fridlender and Mia Indrika. 2001.
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/632BDF7BE8CD1F6EAEDEA37E6046E4A1/S0956796801004026a.pdf/redblack_trees_with_types.pdf Red-black trees with types]
 +
:Stefan Kahrs. 2001. ([http://journals.cambridge.org/action/displayAbstract?aid=83905 JFP]) ([http://www.cs.kent.ac.uk/people/staff/smk/redblack/rb.html Code!])
  
 
;[http://www.cs.ox.ac.uk/ralf.hinze/publications/BitReversal.ps.gz Perfect trees and bit-reversal permutations], a revision of [http://www.cs.ox.ac.uk/ralf.hinze/publications/IAI-TR-99-4.ps.gz Technical Report IAI-TR-99-4]
 
;[http://www.cs.ox.ac.uk/ralf.hinze/publications/BitReversal.ps.gz Perfect trees and bit-reversal permutations], a revision of [http://www.cs.ox.ac.uk/ralf.hinze/publications/IAI-TR-99-4.ps.gz Technical Report IAI-TR-99-4]
Line 279: Line 293:
 
;[https://www.cambridge.org/core/journals/journal-of-functional-programming/article/even-higher-order-functions-for-parsing-or-why-would-anyone-ever-want-to-use-a-sixth-order-function/AAAA5C5E29889CEBC5E944CC1080FE8D Even higher-order functions for parsing or Why would anyone ever want to use a sixth-order function?]
 
;[https://www.cambridge.org/core/journals/journal-of-functional-programming/article/even-higher-order-functions-for-parsing-or-why-would-anyone-ever-want-to-use-a-sixth-order-function/AAAA5C5E29889CEBC5E944CC1080FE8D Even higher-order functions for parsing or Why would anyone ever want to use a sixth-order function?]
 
:Chris Okasaki. 1998.
 
:Chris Okasaki. 1998.
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/991084CDC1A348354224F893E2BD1D0C/S0956796897002931a.pdf/meertens_number.pdf Meertens number]
 +
:Richard Bird. 1998.
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/DB0CF71E6B3D975D1F171C02336F3FA3/S0956796897002736a.pdf/functional-pearl-on-merging-and-selection.pdf On merging and selection]
 +
:Richard Bird. 1997. (See also [http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/merging.ps.gz More on Merging and Selection]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/23D5C1B90A6B00A5D87239054FEDC8CF/S0956796897002803a.pdf/functional-pearl-on-building-trees-with-minimum-height.pdf On building trees with minimum height]
 +
:Richard Bird. 1997.  ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird97:OnBuilding Bib]).
  
 
;[http://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf The Zipper]
 
;[http://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf The Zipper]
Line 297: Line 320:
 
;[http://dx.doi.org/10.1017/S0956796800001830 Drawing Trees]
 
;[http://dx.doi.org/10.1017/S0956796800001830 Drawing Trees]
 
:Andrew J. Kennedy. 1996.
 
:Andrew J. Kennedy. 1996.
 
;[https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.8486&rep=rep1&type=pdf Undoing Dynamic Typing]
 
:Nick Benton. 2008.
 
  
 
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/drawing.ps.gz Deriving Tidy Drawings of Trees]
 
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/drawing.ps.gz Deriving Tidy Drawings of Trees]
 
:Jeremy Gibbons. 1996. (See also [http://www.cs.auckland.ac.nz/CDMTCS//researchreports/003drawing.pdf the research report]).
 
:Jeremy Gibbons. 1996. (See also [http://www.cs.auckland.ac.nz/CDMTCS//researchreports/003drawing.pdf the research report]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/763DE73EB4761FDF681A613BE0E98443/S0956796800000988a.pdf/functional_pearl_on_generating_unique_names.pdf On generating unique names]
 +
:Lennart Augustsson, M Rittri, D Synek. 1994.
  
 
;[http://groups.csail.mit.edu/mac/users/adams/BB/ Efficient Sets - A Balancing Act]
 
;[http://groups.csail.mit.edu/mac/users/adams/BB/ Efficient Sets - A Balancing Act]
 
:Stephen Adams. 1993. ([http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Set.html Data.Set]).
 
:Stephen Adams. 1993. ([http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Set.html Data.Set]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/CC6079CCEC88883F6C10DFB12908795F/S0956796800000630a.pdf/functional_pearls_the_last_tail.pdf The Last Tail]
 +
:Richard Bird. 1993. ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird93:Last Bib]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/A77930CC2C68694EBB93964AF16D06D0/S0956796800000526a.pdf/functional_pearls_a_symmetric_set_of_efficient_list_operations.pdf A Symmetric Set of Efficient List Operations]
 +
:Rob R. Hoogerwoord, 1992. ([https://venus.tue.nl/ep-cgi/ep_publ.opl?taal=NL&fac_id=92&rn=19840694 Hoogerwoord's homepage]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/E55EFDCCB071BBE9FFE0F6543C1BCBA1/S0956796800000368a.pdf/functional_pearls_two_greedy_algorithms.pdf Two Greedy Algorithms]
 +
:Richard Bird, 1992. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#Bird92:Two Bib]).
 +
 +
;[https://www.cambridge.org/core/services/aop-cambridge-core/content/view/2CC831E0F77C77E86DD1E9AF165DECEE/S0956796800020074a.pdf/functional_pearls_on_removing_duplicates.pdf On Removing Duplicates]
 +
:Richard Bird. 1991. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#DBLP:journals/jfp/Bird91a Bib]).
  
 
;[https://academic.oup.com/comjnl/article-pdf/31/3/243/1157325/310243.pdf Nondeterminism with Referential Transparency in Functional Programming Languages]
 
;[https://academic.oup.com/comjnl/article-pdf/31/3/243/1157325/310243.pdf Nondeterminism with Referential Transparency in Functional Programming Languages]
 
:F. Warren Burton. The Computer Journal, Volume 31, Issue 3, 1988, Pages 243-247.
 
:F. Warren Burton. The Computer Journal, Volume 31, Issue 3, 1988, Pages 243-247.
 
;[https://www.cs.nott.ac.uk/~pszgmh/123.pdf It’s Easy As 1,2,3]
 
:Graham Hutton. Journal of Functional Programming, 2021.
 
  
 
=== Potential Pearls ===
 
=== Potential Pearls ===
Line 320: Line 352:
 
:Thorsten Altenkirch. Unpublished draft.
 
:Thorsten Altenkirch. Unpublished draft.
  
 +
<!--
 
=== Offline ===
 
=== Offline ===
  
 
These appear not to be available online, unfortunately. If you know where they live, please link, and move into the 'online' section!
 
These appear not to be available online, unfortunately. If you know where they live, please link, and move into the 'online' section!
 
+
-->
;[http://www.cs.kent.ac.uk/pubs/2001/1293/index.html Red-black trees with types]
 
:Stefan Kahrs. 2001. ([http://journals.cambridge.org/action/displayAbstract?aid=83905 JFP]) ([http://www.cs.kent.ac.uk/people/staff/smk/redblack/rb.html Code!])
 
 
 
;On generating unique names
 
:Lennart Augustsson, M Rittri, D Synek. 1994. ([http://www.cs.chalmers.se/~rittri/#publications Rittri's homepage])
 
 
 
;A Symmetric Set of Efficient List Operations.
 
:Rob R. Hoogerwoord, 1992. ([https://venus.tue.nl/ep-cgi/ep_publ.opl?taal=NL&fac_id=92&rn=19840694 Hoogerwoord's homepage]).
 
 
 
;[http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=335124 Finding celebrities: A lesson in functional programming]
 
:Richard Bird and Sharon Curtis. 2006.
 
 
 
;[http://journals.cambridge.org/action/displayAbstract?aid=254705 On tiling a chessboard]
 
:Richard Bird. 2004. ([http://portal.acm.org/citation.cfm?id=1030333.1030336 ACM])
 
 
 
;[http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=44141 Meertens number]
 
:Richard Bird. 1998.
 
 
 
;[http://journals.cambridge.org/action/displayAbstract?aid=44091 On merging and selection]
 
:Richard Bird. 1997. (See also [http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/merging.ps.gz More on Merging and Selection]).
 
 
 
;[http://journals.cambridge.org/action/displayAbstract?aid=44107 On building trees with minimum height]
 
:Richard Bird. 1997.  ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird97:OnBuilding Bib]).
 
 
 
;The Last Tail.
 
:Richard Bird. 1993. ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird93:Last Bib]).
 
 
 
;Two Greedy Algorithms
 
:Richard Bird, 1992. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#Bird92:Two Bib]).
 
 
 
;On Removing Duplicates
 
:Richard Bird. 1991. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#DBLP:journals/jfp/Bird91a Bib]).
 
  
 
[[Category:Research]] [[Category:Tutorials]]
 
[[Category:Research]] [[Category:Tutorials]]

Revision as of 16:14, 24 January 2022

Functional pearls are elegant, instructive examples of functional programming. They are supposed to be fun, and they teach important programming techniques and fundamental design principles. They traditionally appear in The Journal of Functional Programming, and at ICFP and affiliated workshops.

The history of functional pearls is covered by:

How to Write a Functional Pearl
Richard Bird. ICFP 2006.
Fifteen years of functional pearls
Richard Bird. ICFP 2006.
Strachey's functional pearl, forty years on
Mike Spivey, 2006.
On Barron and Strachey's Cartesian Product Function
Olivier Danvy and Michael Spivey, July 2007

There have been many functional pearls in JFP, and some others at ICFP and the Haskell Workshop. There is also a collection of them in The Fun of Programming.

The pearls tend to concentrate on:

  • Examples of program calculation and proof
  • Neat presentations of new or old data structures
  • Interesting applications and techniques

Some advice on writing pearls for JFP is available in this editorial.

Online

Functional pearls online:

It’s Easy As 1,2,3
Graham Hutton. Journal of Functional Programming, 2021.
What You Needa Know about Yoneda: Profunctor Optics and the Yoneda Lemma
Guillaume Boisseau, Jeremy Gibbons. 2018.
A Pretty But Not Greedy Printer
Jean-Philippe Bernardy. 2017.
Algebraic Graphs with Class
Andrey Mokhov. 2017.
Ode on a Random Urn
Leonidas Lampropoulos, Antal Spector-Zabusky, Kenneth Foner. 2017.
Deriving a Probability Density Calculator
Wazim Mohammed Ismail, Chung-chieh Shan. 2016.
Queueing and Glueing for Optimal Partitioning
Shin-Cheng Mu, Yu-Hsi Chiang, Yu-Han Lyu. 2016.
Free Delivery
Jeremy Gibbons. 2016.
All Sorts of Permutations
Jan Christiansen, Nikita Danilenko, Sandra Dylus. 2016.
A Smart View on Datatypes
Mauro Jaskelioff, Exequiel Rivas. 2015.
Two Can Keep a Secret, If One of Them Uses Haskell
Alejandro Russo. 2015.
Solving the Snake Cube Puzzle in Haskell
Mark P. Jones. 2013.
When Maybe is not good enough
Michael Spivey. 2012.
Monoids: Theme and Variations
Brent Yorgey. 2012.
The Hough transform
Maarten Fokkinga. 2011.
Sorted. Verifying the Problem of the Dutch National Flag in Agda
Wouter Swierstra. 2011.
Typed Quote/Antiquote - Or: Compile-time Parsing
Ralf Hinze. 2011.
Every Bit Counts
Dimitrios Vytiniotis, Andrew Kennedy. 2010.
A Play on Regular Expressions
Sebastian Fischer. Frank Huch, Thomas Wilke. 2010.
Free Theorems Involving Type Constructor Classes
Janis Voigtländer. 2009.
Linear, Bounded, Functional Pretty-Printing
S. Doaitse Swierstra, Olaf Chitil. 2009.
Bidirectionalization for Free!
Janis Voigtländer. 2009.
A Domain-Specific Language for Experimental Game Theory
Eric Walkingshaw and Martin Erwig. 2009.
Functional Pearl: Data Types A La Carte
Wouter Swierstra, 2008
Functional Pearl: Streams and Unique Fixed Points
Ralf Hinze, ICFP 2008
Generic Discrimination: Sorting and Partitioning Unshared Data in Linear Time
Fritz Henglein. 2008
Undoing Dynamic Typing
Nick Benton. 2008.
Much Ado about Two: A Pearl on Parallel Prefix Computation
Janis Voigtländer. 2008.
Clowns to the Left of me, Jokers to the Right: Dissecting Data Structures
Conor McBride. 2008.
Functional Pearl: The Great Escape: Or how to jump the border without getting caught
David Herman. 2007.
Scrap Your Zippers
Michael Adams. 2007. Superseded by the WGP 2010 version.
A type-correct, stack-safe, provably correct expression compiler in Epigram
James McKinna and Joel Wright. 2006.
Applicative Programming with Effects
Conor McBride and Ross Paterson. 2006.
Enumerating the rationals
Jeremy Gibbons, David Lester and Richard Bird. 2006.
A program to solve Sudoku
Richard Bird. 2006. (slides appear here, a Literate Haskell implementation by Graham Hutton based on this can be found here).
Probabilistic functional programming in Haskell
Martin Erwig and Steve Kollmansberger. 2006.
Marble mingling
Sharon Curtis. 2006.
Strong Types for Relational Databases
Alexandra Silva, Joost Visser. 2006. (Haskell Workshop)
Finding celebrities: A lesson in functional programming
Richard Bird and Sharon Curtis. 2006.
Backtracking, interleaving, and terminating monad transformers
Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry. 2005.
Scrap your Nameplate
James Cheney. 2005.
Pickler Combinators
Andrew Kennedy. 2004.
Composing fractals
Mark P. Jones. 2004.
Enumerating the strings of regular languages
M. Douglas McIlroy. 2004.
Calculating the Sieve of Eratosthenes
Lambert Meertens. Journal of Functional Programming, 14(6):759-763, 2004. (slides)
Functional satisfaction
Luc Maranget. 2004. (More info).
Implicit configurations--or, type classes reflect the values of types
Oleg Kiselyov, Chung-chieh Shan. 2004.
Global variables in Haskell
John Hughes. 2004. (JFP)
I am not a number -- I am a free variable
Conor McBride, James McKinna. 2004.
Inverting the Burrows Wheeler transform
Richard Bird and Shin-Cheng Mu. 2004. (Also here).
Parsing permutation phrases
Arthur Baars, Andres Loh and S. Doaitse Swierstra. 2004.
Concurrent distinct choices
Sergio Antoy and Michael Hanus. 2004.
Functional chart parsing of context-free grammars
Peter Ljunglf. 2004.
Type-Safe Cast
Stephanie Weirich. 2004.
Parallel Parsing Processes
Koen Claessen. 2004.
Derivation of a logarithmic time carry lookahead addition circuit
John O'Donnell and Gudula Runger. 2004. (ACM).
Linear lambda calculus and PTIME-completeness
Harry G. Mairson. 2004.
On tiling a chessboard
Richard Bird. 2004. (ACM)
Producing all ideals of a forest, functionally
Jean-Christophe Filliatre and Francois Pottier. 2003.
Trouble shared is trouble halved
Richard Bird, Ralf Hinze. 2003
Formatting: a class act
Ralf Hinze. 2003.
A fresh look at binary search trees
Ralf Hinze. 2002.
The countdown problem
Graham Hutton. 2002.
Packrat parsing: simple, powerful, lazy, linear time, functional pearl
Bryan Ford. 2002.
Monads for Incremental Computing
Magnus Carlsson. 2002.
Haskell does it with class: Functorial unparsing
Ralf Hinze. 2001.
Unfolding pointer algorithms
Richard Bird. 2001.
Maximum marking problems
Richard Bird. 2001.
Weaving a web
Ralf Hinze and Johan Jeuring. 2001.
Normalization by evaluation with typed abstract syntax
Olivier Danvy, Morten Rhiger and Kristoffer H. Rose. 2001.
Do we need dependent types?
Daniel Fridlender and Mia Indrika. 2001.
Red-black trees with types
Stefan Kahrs. 2001. (JFP) (Code!)
Perfect trees and bit-reversal permutations, a revision of Technical Report IAI-TR-99-4
Ralf Hinze. 2000.
Combinators for breadth-first search
Michael Spivey. 2000
Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design
Chris Okasaki. 2000.
Deriving Backtracking Monad Transformers
Ralf Hinze. 2000.
Recursive subtyping revealed
Vladimir Gapeyev, Michael Y. Levin, Benjamin C. Pierce. 2000.
Composing contracts: an adventure in financial engineering
Simon Peyton Jones, Jean-Marc Eber, Julian Seward. 2000.
A poor man's concurrency monad
Koen Claessen. 1999.
Explaining binomial heaps
Ralf Hinze. 1999.
Power series, power serious
M. Douglas McIlroy. 1999.
Red-black trees in a functional setting
Chris Okasaki. 1999.
Proof-directed debugging
Robert Harper. 1999. (see also Proof-directed debugging: revisited for a first-order version).
A pointless derivation of radix sort
Jeremy Gibbons. 1999.
Monadic parsing in Haskell
Graham Hutton and Erik Meijer . 1998.
Polytypic unification
Patrik Jansson and Johan Jeuring. 1998.
Diets for fat sets
Martin Erwig. 1998.
Even higher-order functions for parsing or Why would anyone ever want to use a sixth-order function?
Chris Okasaki. 1998.
Meertens number
Richard Bird. 1998.
On merging and selection
Richard Bird. 1997. (See also More on Merging and Selection).
On building trees with minimum height
Richard Bird. 1997. (Bib).
The Zipper
Gerard Huet. 1997. (See also The Haskell Wikibook).
Lazy wheel sieves and spirals of primes
Colin Runciman. 1997.
Three algorithms on Braun trees
Chris Okasaki. 1997.
The Third Homomorphism Theorem
Jeremy Gibbons. 1996.
Back to Basics: Deriving Representation Changers Functionally.
Graham Hutton, Erik Meijer. 1996.
Drawing Trees
Andrew J. Kennedy. 1996.
Deriving Tidy Drawings of Trees
Jeremy Gibbons. 1996. (See also the research report).
On generating unique names
Lennart Augustsson, M Rittri, D Synek. 1994.
Efficient Sets - A Balancing Act
Stephen Adams. 1993. (Data.Set).
The Last Tail
Richard Bird. 1993. (Bib).
A Symmetric Set of Efficient List Operations
Rob R. Hoogerwoord, 1992. (Hoogerwoord's homepage).
Two Greedy Algorithms
Richard Bird, 1992. (Bib).
On Removing Duplicates
Richard Bird. 1991. (Bib).
Nondeterminism with Referential Transparency in Functional Programming Languages
F. Warren Burton. The Computer Journal, Volume 31, Issue 3, 1988, Pages 243-247.

Potential Pearls

Unpublished pearls.

α-conversion is easy
Thorsten Altenkirch. Unpublished draft.