basic framework without piping and the rest laid out, we have to modify error messages and implement piping