transposes :: ByteString -> [ByteString]
transposes w = if B.length w <= 1
                  then []
                  else splits' w >>= \(first, second) ->
                       return $ B.concat [ B.init first
                                         ,  B.pack [ B.head second
                                                   , B.last first
                                                   ]
                                         , B.tail second
                                         ]
transposes :: ByteString -> [ByteString]
transposes w = if B.length w <= 1
                  then []
                  else splits' w >>= \(first, second) ->
                       return $ B.concat [ B.init first
                                         ,  B.pack [ B.head second
                                                   , B.last first
                                                   ]
                                         , B.tail second
                                         ]
transposes w = if B.length w <= 1
                  then []
                  else splits' w >>= \(first, second) ->
                       return $ B.concat [ B.init first
                                         ,  B.pack [ B.head second
                                                   , B.last first
                                                   ]
                                         , B.tail second
                                         ]