Applying two bools to each other should not work
Applying BoolTy to BoolTy -> BoolTy should give you BoolTy
Applying the wrong type to an abstraction should fail
Refactor away if structure to function
Applying an abstraction that returns an IntTy