
def create_checked(predicate,error="ERROR: value does not meet constraints"):
       def fun(value):
               if predicate(value):
                       return value
               raise Exception(error)
       return fun

def And(*predicates):
       def inner(obj):
               for p in predicates:
                       if not p(obj):
                               return False
               return True
       return inner

def Or(*predicates):
       def inner(obj):
               for p in predicates:
                       if p(obj):
                               return True
               return False
       return inner

def Not(predicate):
       def inner(obj):
               return not predicate(obj)
       return inner

# USAGE example
# create_checked(os.path.isfile)

