validate should raise when input is invalid

maybe we want to change this behaviour later, but
for now the interface should be consistent between
when we use valid? and validate.