@@ -161,13 +161,19 @@ class SemiIsoMonad m => SemiIsoFix m where
161161 {-# MINIMAL sifix | (=//=) #-}
162162
163163-- | Equivalent of 'sequence'.
164−--
165−-- Note that it is not possible to write sequence_, because
166−-- you cannot void a SemiIsoFunctor.
167164sisequence :: SemiIsoApply f => [f a] -> f [a]
168165sisequence [] = sipure _Empty
169166sisequence (x:xs) = _Cons /$/ x /*/ sisequence xs
170167
168+-- | Equivalent of 'sequence_', restricted to units.
169+sisequence_ :: SemiIsoApply f => [f ()] -> f ()
170+sisequence_ [] = sipure _Empty
171+sisequence_ (x:xs) = unit /$/ x /*/ sisequence_ xs
172+
171173-- | Equivalent of 'replicateM'.
172174sireplicate :: SemiIsoApply f => Int -> f a -> f [a]
173175sireplicate n f = sisequence (replicate n f)
176+
177+-- | Equivalent of 'replicateM_', restricted to units.
178+sireplicate_ :: SemiIsoApply f => Int -> f () -> f ()
179+sireplicate_ n f = sisequence_ (replicate n f)