cons :: a → c → c consif :: b → a → c → c false :: b filter :: (a → b) → c → c nil :: c true :: b consif(true, X, Y) → cons(X, Y) consif(false, U, V) → V filter(I, nil) → nil filter(J, cons(X1, Y1)) → consif(J(X1), X1, filter(J, Y1))