join _ [] = [] -- this means that join on the empty list is the empty string join delim strings = foldl1 (\left right -> left ++ delim ++ right ) strings -- this is join implemented with reduce -- also this could be written as join delim strings = foldl1 ((++) . (++ delim)) strings -- or more perlishly join delim strings = foldl1 (\left right -> concat [left, delim, right]) strings -- or with autocurrying fun join = foldl1 . ((++) .) . flip (++)