KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have functions like: millionsOfCombinations = [[a, b, c, d] | a <- filter (...some filter...) someListOfAs, b <- (...some other filter...) someListOfBs, c <- someListOfCs, d <- someListOfDs] aLotOfCombinationsOfCombinations = [[comb1, comb2, comb3] | comb1 <- millionsOfCombinations, comb2 <- millionsOfCombinations, comb3 <- someList, ...around 10 function calls to find if [comb1, comb2, comb3] is actually useful] Evaluating millionsOfCombinations takes 40s. on a very fast workstation. Evaluating aLotOfCombinationsOfCombinations !!0 took 2 days :-( How can I speed up this code? So far I've had 2 ideas - use a profiler. Tried running myapp +RTS -sstderr after compiling with GHC, but get a blank screen and don't want to wait days for it to finish. 2nd thought was to somehow cache millionsOfCombinations . Do I understand correctly that for each value in aLotOfCombinationsOfCombinations , millionsOfCombinations gets evaluated multiple times? If that is so, how can I cache the result? Obviously I've just started learning Haskell. I know there is a way to do call caching with a monad, but I still don't understand those things.
Tags (comma-separated)
Save Edits
Cancel