Datatype generic programming
GHC Generics provide a nice interface for datatype generic programming. The core idea is that every datatype is representable as a sum of products. The GHC.Generics
module defines a small sufficient set of datatypes. The unit
type represents constructors with no arguments:
data U1 p = U1 -- unit
The V1
datatype, on the other hand, represents types with no constructors (empty
):
data V1 p -- empty
Sums and products are represented respectively by the following types:
(:+:) f g p = L1 (f p) | R1 (g p) -- sum (:*:) f g p = f p :*: g p -- product
The sum types with more than two constructors are represented by the recursive application of (:+:
), and it's a similar case for the product types.
The K1
datatype acts as a container ...
Get Haskell High Performance Programming now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.