У меня есть следующий код. Префикс M
обозначает функции от Data.Map.Strict
, а Table
- это тип псевдонима для Data.Map.Strict.Map Mapping Bool
, где Mapping
- произвольная непрозрачная структура.Работа с Data.Map.StrictMap.Карты с использованием Control.Parallel
computeCoverage :: Table -> Expr -> Maybe Coverage
computeCoverage t e = go t True M.empty
where go src flag targ
| null src = if flag
then Nothing
else Just (M.size t, targ)
| otherwise = let ((m, b), rest) = M.deleteFindMin src
result = interpret e m
flag' = result && flag in
go rest flag' (if b == result then targ else M.insert m b targ)
Я хотел бы иметь возможность использовать Control.Parallel
выполнить это с таким же параллелизмом, как это возможно. Однако я не уверен, как это сделать. Основываясь на чтении Data.Map.Strict
, кажется, что вы должны сделать, это позвонить splitRoot
, а затем сделать все, что вам нужно, в результирующем списке, а затем перекомбинировать (я думаю?). Я в принципе получил правильную идею? Если нет, что мне следует делать, чтобы распараллелить код выше?
А что такое 'Coverage'? Каков обзор этого алгоритма высокого уровня? – pdexter