我正在尝试从给定的列表列表中创建过滤的笛卡尔积。天真的解决方案如下:
import Data.Traversable (sequence)
predicate :: [T] -> Bool
predicate = ...
filteredCartesianProduct :: [[T]] -> [[T]]
filteredCartesianProduct = filter predicate . sequence
traversable 是否足够强大,可以在不创建中间列表的情况下完成它?有没有一种惯用的方法来做到这一点?