
On 2012-09-09, Chaddaï Fouché
On Sat, Sep 8, 2012 at 4:49 PM, Iain Nicol
wrote: Hi,
I think I'm trying to lift 'Data.List.intersperse' (to applicative or a monad) in such a way that its (first) argument is recomputed each time it is used.
Instead of using intersperse, just generate two list and interlace them (interlace is easy to write, though not in Data.List [...] That seems more elegant to me but you'll judge :)
I appreciate the response. Your suggestion was indeed significantly cleaner than what I had come up with. And your second response has encouraged me to explore the "Test.QuickCheck.Modifiers" module in general. Nonetheless, I was still hoping to reuse the intersperse function, and so I spent "a little" bit more time on this problem. After hours of experimenting in the wrong direction, the following accidentally came to me: import Test.QuickCheck (elements, Gen, sized) import Data.List (intersperse) mixIntersperse :: Gen String -> Gen String -> Gen [String] mixIntersperse genSep genWord = sized (sequence . intersperse genSep . (`replicate` genWord)) Thanks, -- Iain