In Control.Monad, when has type
when :: Monad m => Bool -> m () -> m ()
I think this type should be generalized to
when :: Monad m => Bool -> m a -> m ()
to avoid silly "return ()" statements like in
when cond $ do
monadicComputationWhoseResultIWantToDiscard
return ()
Cheers,
Andreas
P.S.: A more systematic solution would be to change the Haskell
language by either introducing a Top type which is the supertype of
everything and use it instead of ().
Alternatively, make () the top type and interpret matching against the
empty tuple as just computing the weak head normal form and then
discarding the result. The latter is needed to preserve the current
behavior of
(\ () -> bla) (error "raised")
vs.
(\ _ -> bla) (error "not raised")
--
Andreas Abel <>< Du bist der geliebte Mensch.
Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY
andreas.abel at ifi.lmu.dehttp://www2.tcs.ifi.lmu.de/~abel/