Use splitAt instead of take/drop calls.
Use *** from Control.Arrow to map over both tuple elements.