Is it possible to write join down for Arrows, not ArrowApply?
问题 I tried writing down joinArr :: ??? a => a r (a r b) -> a r b . I came up with a solution which uses app , therefore narrowing the a down to ArrowApply 's: joinArr :: ArrowApply a => a r (a r b) -> a r b joinArr g = g &&& Control.Category.id >>> app Is it possible to have this function written down for arrows? My guess is no. Control.Monad.join could have been a good stand-in for >>= in the definition of the Monad type class: m >>= k = join $ k <$> m . Having joinArr :: Arrow a => a r (a r b)