content: -- PARTIAL APPLICATION --------------------------------------------
  
  on f1(x)
      x * 2
  end f1
  
  on f2(x)
      x * x
  end f2
  
  on run
  
      tell curry(map)
          set fsf1 to |λ|(f1)
          set fsf2 to |λ|(f2)
      end tell
  
      {fsf1's |λ|({0, 1, 2, 3}), ¬
          fsf2's |λ|({0, 1, 2, 3}), ¬
          fsf1's |λ|({2, 4, 6, 8}), ¬
          fsf2's |λ|({2, 4, 6, 8})}
  end run
  
  
  -- GENERIC FUNCTIONS --------------------------------------------
  
  -- curry :: (Script|Handler) -> Script
  on curry(f)
      script
          on |λ|(a)
              script
                  on |λ|(b)
                      |λ|(a, b) of mReturn(f)
                  end |λ|
              end script
          end |λ|
      end script
  end curry
  
  -- map :: (a -> b) -> [a] -> [b]
  on map(f, xs)
      tell mReturn(f)
          set lng to length of xs
          set lst to {}
          repeat with i from 1 to lng
              set end of lst to |λ|(item i of xs, i, xs)
          end repeat
          return lst
      end tell
  end map
  
  -- Lift 2nd class handler function into 1st class script wrapper
  -- mReturn :: Handler -> Script
  on mReturn(f)
      if class of f is script then
          f
      else
          script
              property |λ| : f
          end script
      end if
  end mReturn
  