I'm trying to implement function downpairs which takes monad of pairs and transform it into pair of monad
My current implementation is
import Control.Monad
import Control.Arrow
import Data.Maybe
downpair :: (Monad m) => m (a, b) -> (m a, m b)
downpair = ((return . fst =<<) &&& (return . snd =<<))
main = do
print $ downpair $ Just ("Hello", "World")
Is there way to implement downpair in more compact maner?
PS Sorry for my poor English