playing by using predicates as types