[Haskell-cafe] Is there a nicer way to do this?

John Hamilton jlhamilton at gmail.com
Sun Jul 6 20:25:19 EDT 2008


On Sun, Jul 6, 2008 at 16:45, Michael Feathers <mfeathers at mindspring.com> wrote:
>
>
> segment :: Int -> [a] -> [[a]]
> segment 0 _ = []
> segment _ [] = []
> segment n x = (take n x) : segment n (drop n x)
>
>
> I did a version of this which used splitAt but I wasn't sure whether it was
> going to buy me anything re performance that would justify its ugliness.

You can use

 segment n = takeWhile (not . null) . unfoldr (Just . splitAt n)

I don't know how it compares in performance.  It's from
http://www.haskell.org/haskellwiki/Blow_your_mind

- John


More information about the Haskell-Cafe mailing list