Skip to content

Instantly share code, notes, and snippets.

@hyone
Created July 31, 2012 10:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hyone/3215897 to your computer and use it in GitHub Desktop.
Save hyone/3215897 to your computer and use it in GitHub Desktop.
split a list into sublists that have N items
import Control.Monad.State
splitEvery :: Int -> [a] -> [[a]]
splitEvery n = takeWhile (not . null) . evalState (sequence $ repeat (state (splitAt n)))
{-
ghci> splitEvery 5 [1..27]
[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27]]
ghci> splitEvery 5 []
[]
ghci> splitEvery 0 [1..27]
[]
-}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment