title: TypeScript typing errors when piping/composing functions
body: <p>When piping data that varies in type, I receive typing errors. How can I satisfy TypeScript?</p>
  <pre><code>const square = (x: number) =&gt; x * x
  
  console.log(
    R.pipe(
      R.add, // two values
      square // one value
    )(1, 2)
  )
  </code></pre>
  <blockquote>
  <p>[tsserver 2769] [E] No overload matches this call.The last overload
  gave the following error.</p>
  <p>Argument of type '(x: number) =&gt; number' is not assignable to
  parameter of type '(x: (b: number) =&gt; number) =&gt; number'.</p>
  <p>Types of parameters 'x' and 'x' are incompatible.</p>
  <p>Type '(b: number) =&gt; number' is not assignable to type 'number'.</p>
  </blockquote>
  <p>I have <code>@types/ramda</code> installed.</p>