summaryrefslogtreecommitdiff
path: root/ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs
diff options
context:
space:
mode:
Diffstat (limited to 'ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs')
-rw-r--r--ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs4
1 files changed, 1 insertions, 3 deletions
diff --git a/ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs b/ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs
index 8e92dee..7939d36 100644
--- a/ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs
+++ b/ws2015/ffp/blaetter/07/FFP_U07_Monaden2.hs
@@ -282,13 +282,11 @@ memoWinchance atts defs = runST (newSTRef Map.empty >>= memoWinchance' atts defs
282memoWinchance' :: forall s. [Monster] -> [Monster] -> STRef s MM -> ST s Double 282memoWinchance' :: forall s. [Monster] -> [Monster] -> STRef s MM -> ST s Double
283memoWinchance' [] _ _ = return 0 -- We do this here so we don't clutter our manual with entries for empty lists 283memoWinchance' [] _ _ = return 0 -- We do this here so we don't clutter our manual with entries for empty lists
284memoWinchance' _ [] _ = return 1 284memoWinchance' _ [] _ = return 1
285memoWinchance' atts defs mmRef = recall >>= fromMaybeM (winchance >>= memoize) 285memoWinchance' atts defs mmRef = recall >>= maybe (winchance >>= memoize) return
286 where 286 where
287 recall = Map.lookup (atts, defs) <$> readSTRef mmRef 287 recall = Map.lookup (atts, defs) <$> readSTRef mmRef
288 memoize x = modifySTRef mmRef (Map.insert (atts, defs) x) >> return x 288 memoize x = modifySTRef mmRef (Map.insert (atts, defs) x) >> return x
289 winchance = winchance' atts defs mmRef 289 winchance = winchance' atts defs mmRef
290 fromMaybeM x Nothing = x
291 fromMaybeM _ (Just x) = return x
292 290
293 winchance' :: forall s. [Monster] -> [Monster] -> STRef s MM -> ST s Double 291 winchance' :: forall s. [Monster] -> [Monster] -> STRef s MM -> ST s Double
294 winchance' allatts@(a:atts) alldefs@(d:defs) mmRef 292 winchance' allatts@(a:atts) alldefs@(d:defs) mmRef