module Data.Sequence.Chunk (chunk) where

import Data.Sequence as SQ

-- | 'chunk n xs' splits 'xs' into 'n' chunks
chunk :: Int -> Seq a -> Seq (Seq a)
chunk n xs = let m = ceiling $ realToFrac (SQ.length xs) / realToFrac n
                 f xs | SQ.null xs = SQ.empty
                 f xs = SQ.take m xs <| (f $ SQ.drop m xs)
             in f xs