Each operation has some requirements for the input types, and can broadcast some values into others (example Vector + Float -> Vector). For example, if the op only accept booleans, all other value types will throw an error.