content: on run
  
      set fs to {sin_, cos_, cube_}
      set afs to {asin_, acos_, croot_}
  
      -- Form a list of three composed function objects,
      -- and map testWithHalf() across the list to produce the results of
      -- application of each composed function (base function composed with inverse) to 0.5
  
      script testWithHalf
          on |λ|(f)
              mReturn(f)'s |λ|(0.5)
          end |λ|
      end script
  
      map(testWithHalf, zipWith(mCompose, fs, afs))
  
      --> {0.5, 0.5, 0.5}
  end run
  
  -- Simple composition of two unadorned handlers into
  -- a method of a script object
  on mCompose(f, g)
      script
          on |λ|(x)
              mReturn(f)'s |λ|(mReturn(g)'s |λ|(x))
          end |λ|
      end script
  end mCompose
  
  -- 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
  
  -- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
  on zipWith(f, xs, ys)
      set lng to min(length of xs, length of ys)
      set lst to {}
      tell mReturn(f)
          repeat with i from 1 to lng
              set end of lst to |λ|(item i of xs, item i of ys)
          end repeat
          return lst
      end tell
  end zipWith
  
  -- min :: Ord a => a -> a -> a
  on min(x, y)
      if y < x then
          y
      else
          x
      end if
  end min
  
  on sin:r
      (do shell script "echo 's(" & r & ")' | bc -l") as real
  end sin:
  
  on cos:r
      (do shell script "echo 'c(" & r & ")' | bc -l") as real
  end cos:
  
  on cube:x
      x ^ 3
  end cube:
  
  on croot:x
      x ^ (1 / 3)
  end croot:
  
  on asin:r
      (do shell script "echo 'a(" & r & "/sqrt(1-" & r & "^2))' | bc -l") as real
  end asin:
  
  on acos:r
      (do shell script "echo 'a(sqrt(1-" & r & "^2)/" & r & ")' | bc -l") as real
  end acos:
  