(setglobal Functors!
  (let
    (O =
       (function X is_a_functor always_inline
         (let
           (cow = (function x[int] : int (apply (field_imm 0 X) x))
            sheep = (function x[int] : int (+ 1 (apply cow x))))
           (makeblock 0 cow sheep)))
     F =
       (function X Y is_a_functor always_inline
         (let
           (cow =
              (function x[int] : int
                (apply (field_imm 0 Y) (apply (field_imm 0 X) x)))
            sheep = (function x[int] : int (+ 1 (apply cow x))))
           (makeblock 0 cow sheep)))
     F1 =
       (function X Y is_a_functor always_inline
         (let
           (cow =
              (function x[int] : int
                (apply (field_imm 0 Y) (apply (field_imm 0 X) x)))
            sheep = (function x[int] : int (+ 1 (apply cow x))))
           (makeblock 0 sheep)))
     F2 =
       (function X Y is_a_functor always_inline
         (let
           (X =a (makeblock 0 (field_mut 1 X))
            Y =a (makeblock 0 (field_mut 1 Y))
            cow =
              (function x[int] : int
                (apply (field_imm 0 Y) (apply (field_imm 0 X) x)))
            sheep = (function x[int] : int (+ 1 (apply cow x))))
           (makeblock 0 sheep)))
     M =
       (let
         (F =
            (function X Y is_a_functor always_inline
              (let
                (cow =
                   (function x[int] : int
                     (apply (field_imm 0 Y) (apply (field_imm 0 X) x)))
                 sheep = (function x[int] : int (+ 1 (apply cow x))))
                (makeblock 0 cow sheep))))
         (makeblock 0
           (function funarg funarg is_a_functor stub
             (let
               (let =
                  (apply F (makeblock 0 (field_mut 1 funarg))
                    (makeblock 0 (field_mut 1 funarg))))
               (makeblock 0 (field_mut 1 let)))))))
    (makeblock 0 O F F1 F2 M)))
