Type-indexed data types Ralf Hinze1;2, Johan Jeuring2;3, and Andres L¨oh2 1 Institut f¨urInformatik III, Universit¨atBonn R¨omerstraße164, 53117 Bonn, Germany
[email protected] http://www.informatik.uni-bonn.de/~ralf/ 2 Institute of Information and Computing Sciences, Utrecht University P.O.Box 80.089, 3508 TB Utrecht, The Netherlands fralf,johanj,
[email protected] http://www.cs.uu.nl/~fralf,johanj,andresg/ 3 Open University, Heerlen, The Netherlands Abstract. A polytypic function is a function that can be instantiated on many data types to obtain data type specific functionality. Examples of polytypic functions are the functions that can be derived in Haskell, such as show, read, and ‘ ’. More advanced examples are functions for digital searching, pattern matching, unification, rewriting, and structure editing. For each of these problems, we not only have to define poly- typic functionality, but also a type-indexed data type: a data type that is constructed in a generic way from an argument data type. For ex- ample, in the case of digital searching we have to define a search tree type by induction on the structure of the type of search keys. This paper shows how to define type-indexed data types, discusses several examples of type-indexed data types, and shows how to specialize type-indexed data types. The approach has been implemented in Generic Haskell, a generic programming extension of the functional language Haskell. 1 Introduction A polytypic (or generic, type-indexed) function is a function that can be instan- tiated on many data types to obtain data type specific functionality.