
On 24.08.12 3:22 PM, Edward Kmett wrote:
Personally, I would really like to see these added.
+1
Alas, I missed the discussion the first time around, and I'm afraid if I tried to raise the issue again the safety police will go through and actively remove the 'a's from the remaining useful combinators I still have. ;)
In the mentioned discussion, I proposed to generalize the types of when and unless to when :: Monad m => Bool -> m a -> m () unless :: Monad m => Bool -> m a -> m () which amounts to implement e.g. when by when True m = m >> return () when False m = return () My proposal triggered an outcry by the `safety community' and I dropped it. It seems that adding when_ and unless_ seems to be a compromise everyone can live with. Cheers, Andreas
I do find it particularly obnoxious that I have to round trip through the monad transformer stack just to rip off a type argument when couldn't use if it wanted to in the first place.
Moreover, the 'void' type that actually wound up implemented doesn't help at all if you only know you have a Monad and don't have the additional Functor, (e.g. are writing a monad transformer), so even though void exists you wind up having to use 'do x <- ...; return ()' in most library code anyways.
-Edward
On Fri, Aug 24, 2012 at 5:12 AM, Oren Ben-Kiki
mailto:haskell-oren@ben-kiki.org> wrote: I understand why the normal signature is:
when :: Monad m => Bool -> m () -> m () unless :: Monad m => Bool -> m () -> m ()
But why isn't there also:
when_ :: Monad m => Bool -> m a -> m () unless_ :: Monad m => Bool -> m a -> m ()
That is, I agree that results shouldn't be discarded "by default", but it should be easy to get rid of them if they are unneeded.
Thanks,
Oren Ben-Kiki
-- Andreas Abel <>< Du bist der geliebte Mensch. Theoretical Computer Science, University of Munich Oettingenstr. 67, D-80538 Munich, GERMANY andreas.abel@ifi.lmu.de http://www2.tcs.ifi.lmu.de/~abel/