doInstruction s (Move x y)
  | x > y = take y removed ++ [s !! x] ++ drop y removed
  | otherwise = take y removed ++ [s !! x] ++ drop y removed
  where removed = take x s ++ drop (x+1) s
doInstruction s (Move x y)
  | x > y = take y removed ++ [s !! x] ++ drop y removed
  | otherwise = take y removed ++ [s !! x] ++ drop y removed
  where removed = take x s ++ drop (x+1) s
doInstruction s (Move x y)
  | x > y = take y removed ++ [s !! x] ++ drop y removed
  | otherwise = take y removed ++ [s !! x] ++ drop y removed
  where removed = take x s ++ drop (x+1) s