left :: Tape a  -- ^ The tape
     -> Either (ExecutionError a) (Tape a)
     {- ^ A new tape with its pointer pointing to
      - the element to the left of the pointer in
      - the original tape; or an execution error if
      - the tape to the left is exhausted -}
left t@(Tape [] _ _) =
  Left $ ExecutionError "Error trying to go left on an empty tape" t
left :: Tape a  -- ^ The tape
     -> Either (ExecutionError a) (Tape a)
left t@(Tape [] _ _) =
  Left $ ExecutionError "Error trying to go left on an empty tape" t
left t@(Tape [] _ _) =
  Left $ ExecutionError "Error trying to go left on an empty tape" t