@@ -1093,25 +1093,20 @@ take n (Fold fstep finitial fextract) = Fold step initial extract
10931093
10941094 where
10951095
1096− initial = do
1097− res <- finitial
1098− case res of
1099− Partial s ->
1100− if n > 0
1101− then return $ Partial $ Tuple'Fused 0 s
1102− else Done <$> fextract s
1103− Done b -> return $ Done b
1104−
1105− step (Tuple'Fused i r) a = do
1106− res <- fstep r a
1096+ {-# INLINE next #-}
1097+ next i res =
11071098 case res of
1108− Partial sres -> do
1099+ Partial s -> do
11091100 let i1 = i + 1
1110− s1 = Tuple'Fused i1 sres
1101+ s1 = Tuple'Fused i1 s
11111102 if i1 < n
11121103 then return $ Partial s1
1113− else Done <$> fextract sres
1114− Done bres -> return $ Done bres
1104+ else Done <$> fextract s
1105+ Done b -> return $ Done b
1106+
1107+ initial = finitial >>= next (-1)
1108+
1109+ step (Tuple'Fused i r) a = fstep r a >>= next i
11151110
11161111 extract (Tuple'Fused _ r) = fextract r
11171112