Parallel list comprehensions
Andrew Pimlott
andrew at pimlott.net
Sat Feb 4 18:06:38 EST 2006
On Sat, Feb 04, 2006 at 06:31:56PM +0000, Jon Fairbairn wrote:
> There ought to be a list_product somewhere (I mean [1..]
> `list_product` [4..] ==
> [(1,4),(2,4),(1,5),(3,4),(2,5),(1,6),...]). Is there?
This is called "fair conjunction" in "Backtracking, Interleaving, and
Terminating Monad Transformers" [1].
(>>-) :: [a] -> (a -> [b]) -> [b]
[] >>- f = []
(x:xs) >>- f = interleave (f x) (xs >>- f)
interleave :: [a] -> [a] -> [a]
interleave [] ys = ys
interleave (x:xs) ys = x : interleave ys xs
t = take 6 ([1..] >>- \x ->
[4..] >>- \y ->
[(x, y)])
Andrew
[1] http://okmij.org/ftp/Computation/monads.html#LogicT
More information about the Haskell-prime
mailing list