Scrap your boilerplate (SYB) is another early approach to datatype-generic programming, that is, it provides a way to define generic functions over a "universal" type representation.
SYB differs from the other two approaches we have explored in that the type representation is obfuscated from the user.
Earlier versions of the SYB approach had a strong focus on generic traversals over complex nested data structures, for example:
data Book = Book Title [Chapter] data Chapter = Chapter Title [Section] data Section = Section Title [Para] type Title = String; type Para = String haskellDP = Book "Haskell Design Patterns" chapters chapters = [Chapter "The building blocks" sections1, Chapter "IO Patterns" sections2] sections1 = [Section "1.1" ["Lorem lorem"], Section "1.2" ["Lorem lorem", "Lorem lorem"]] sections2 = [Section "2.1" ["Ipsum Ipsum"], Section "2.2" ["Ipsum Ipsum", "Ipsum Ipsum"]]
Suppose we have...