23 May
                
                    2007
                
            
            
                23 May
                
                '07
                
            
            
            
        
    
                5:09 p.m.
            
        Spencer,
How about:
do x ==> (x :: Monad m => m a)
That one does not do it, because now you demand x to be polymorphic in all monad types m and all monad-element types a, which I guess restricts x to undefined and return undefined and combinations thereof, glued together by monadic binds.
do x ==> (asTypeOf x (return ()))
Again, no, for now you restrict the element type to () and, hence, you preclude, for instance, do return False Cheers, Stefan