Ah, now I see - I want the monadic bind via innerJoin, while current (>>=) uses unwrap.
ghci> (\ p f -> unwrap (fmap f p)) ( pure () ) ( \ _ -> rotR (1/2) ( pure () ) )
(0>½)|()
(½>1)|()
ghci> (\ p f -> innerJoin (fmap f p)) ( pure () ) ( \ _ -> rotR (1/2) ( pure () ) )
-1½-(0>½)|()
(½>1)-1½|()
ghci> rotR (1/2) ( pure () )
-1½-(0>½)|()
(½>1)-1½|()
just by grepping and counting, it seems to me that innerJoin is used much more often than unwrap. Perhaps the observation in my question is the reason?
NB - previous discussion (of monadic bind and laws) Instance Monad Pattern should use squeezeJoin instead of unwrap? ... and the current observation is " should use innerJoin"?
[EDIT] here is another example for innerJoin $ fmap .. (that is, >>=) Using dynamic values inside within or whenT - #2 by yaxu