C     to be determined.highly unstable)Stephen Tetley <stephen.tetley@gmail.com>'Convert a join list to a regular list. 'Build a join list from a regular list. Create an empty join list. Create a singleton join list. /Cons an element to the front of the join list. .Snoc an element to the tail of the join list. 8Catenate two join lists. Unlike (++) on regular lists, ; catenation on join lists is (relatively) cheap hence the  name  join list. =An alias for (++) that does not cause a name clash with the  Prelude. #Test whether a join list is empty. ,Concatenate a (join) list of (join) lists. Get the length of a join list. !Map a function over a join list. "Build a join list of n elements. :Repeatedly build a join list by catenating the seed list. =A generalized fold, where each constructor has an operation. &Right-associative fold of a JoinList. %Left-associative fold of a JoinList. "unfoldl is permitted due to cheap snoc-ing. unfoldr - the usual unfoldr opertation.  cross zip, - zip a join list against a regular list, > maintaining the shape of the join list provided the lengths  of the lists match. 7Generalized cross zip - c.f. zipWith on regular lists.         joinlist-0.2.0 Data.JoinListJoinListtoListfromListempty singletonconssnoc++joinnullconcatlengthmap replicaterepeatedgfoldfoldrfoldlunfoldlunfoldrxzipxzipWith:++:SingleEmpty