(define super {(progression A) --> (A --> B) --> (B --> C --> C) --> C --> C} [B S T] P F Y -> (if (T B) Y (F (P B) (super [(S B) S T] P F Y)))) (define forall {(progression A) --> (A --> boolean) --> boolean} Progression P -> (super Progression P (fn and) true)) (define exists {(progression A) --> (A --> boolean) --> boolean} Progression P -> (super Progression P (fn or) false)) (define for* {(progression A) --> (A --> B) --> number} Progression P -> (super Progression P (fn do) 0)) (define filter* {(progression A) --> (A --> boolean) --> (list A)} Progression P -> (super Progression (/. X (if (P X) [X] [])) (fn append) [])) (for* [0 (+ 1) (= 100)] (fn print)) (filter* [1 (+ 1) (= 100)] (/. X (integer? (/ X 2))))