Hey Jacek, 

Thanks very much for this. I took a look around, and ended up using the chop function from that package. So there looks to be a lot of goodies in that package.


Cheers
Tim 


On Sun, Jul 26, 2015 at 2:01 PM, Jacek Dudek <jzdudek@gmail.com> wrote:
Hi Timothy,

You might want to check out the split package.
Here's the link: http://hackage.haskell.org/package/split

On 7/25/15, Timothy Washington <twashing@gmail.com> wrote:
> While I can say A), what I really need is B)
>
> *A)* > *take 5 $ chunksOf 10 [0..]*
> [[0,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,28,29],[30,31,32,33,34,35,36,37,38,39],[40,41,42,43,44,45,46,47,48,49]]
>
> *B)* > take 5 $ someFn 10 1 [0..]
> [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3,4,5,6,7,8,9,10,11,12],[4,5,6,7,8,9,10,11,12,13]]
>
>
> The music theory package indeed has a working partition function (source
> here <http://rd.slavepianos.org/sw/hmt/Music/Theory/List.hs>). The
> implementation simply *i)* takes `n` from the source list, *ii)* drops by
> `m` then recurses.
>
> segments :: Int -> Int -> [a] -> [[a]]
> segments n m p =
>     let q = take n p
>         p' = drop m p
>     in if length q /= n then [] else q : segments n m p'
>
>
>
> But that's rather manual. So I played around with this using *chop*, and
> came up with the *divvy* function. It does exactly what I need.
>
> divvy :: Int -> Int -> [a] -> [[a]]
> divvy n m lst =
>   chop (\xs -> (take n xs , drop m xs)) lst
>
>
>> *take 5 $ partitionClojure 10 1 [0..]*
> [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3,4,5,6,7,8,9,10,11,12],[4,5,6,7,8,9,10,11,12,13]]
>
>
> Thanks guys. This helped a lot :)
>
>
> Tim
>
>
> On Sat, Jul 25, 2015 at 10:56 AM, Dan Serban <dserban01@gmail.com> wrote:
>
>> It looks like chunksOf will take you most of the way there. Here's my
>> quick and dirty GHCi session output:
>>
>> λ> import Data.List.Split
>> λ>
>> λ> let clojurePartition n m = map (take n) $ chunksOf (n+m) [0..]
>> λ>
>> λ> take 3 $ clojurePartition 4 6
>> [[0,1,2,3],[10,11,12,13],[20,21,22,23]]