1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
glob :: [S.ByteString] -> [S.ByteString]
#if SIMPLE_GLOB
glob xs = [S.concat xs]
#else
glob xs = reverse (map (S.concat . reverse) (loop xs 0 [] []))
  where
    loop [] _ [] zss = zss
    loop [] _ ys zss =
      zss' `seq` zss'
        where zss' = ys : zss
    loop xs' l ys zss | l >= 65536 =
      zss' `seq` loop xs' 0 [] zss'
        where zss' = ys : zss
    loop (x : xs') l ys zss =
      l' `seq` ys' `seq` loop xs' l' ys' zss
        where l'  = S.length x + l
              ys' = x : ys
#endif