リストのランダムアクセスは遅いから専用の関数が用意されてないだけ
Data.Sequenceならupdateがあるので簡単
swap :: Int -> Int -> Seq a -> Seq a
swap i j s = update i (s `index` j) $ update j (s `index` i) s