title: Am I using the Lambda Calculus term _combinator_ correctly?
body: <p>I am OOP-heritage C# developer trying hard to respect the theory behind functional programming. In the following code sample below, am I using the Lambda Calculus term <em>combinator</em> (in <code>FuncCombinator</code>) correctly?</p>
  
  <pre><code>&lt;Query Kind="Program" /&gt;
  
  public static class FuncExtensions
  {
      public static Func&lt;T, bool&gt; And&lt;T&gt;(this Func&lt;T, bool&gt; thisPredicate, Func&lt;T, bool&gt; predicate)
      {
          return a =&gt; thisPredicate(a) &amp;&amp; predicate(a);
      }
  
      public static Func&lt;T, bool&gt; AndNot&lt;T&gt;(this Func&lt;T, bool&gt; thisPredicate, Func&lt;T, bool&gt; predicate)
      {
          return a =&gt; thisPredicate(a) &amp;&amp; !predicate(a);
      }
  
      public static Func&lt;T, bool&gt; Or&lt;T&gt;(this Func&lt;T, bool&gt; thisPredicate, Func&lt;T, bool&gt; predicate)
      {
          return a =&gt; thisPredicate(a) || predicate(a);
      }
  
      public static Func&lt;T, bool&gt; OrNot&lt;T&gt;(this Func&lt;T, bool&gt; thisPredicate, Func&lt;T, bool&gt; predicate)
      {
          return a =&gt; thisPredicate(a) || !predicate(a);
      }
  }
  
  public static class FuncCombinator
  {
      public static Func&lt;T, bool&gt; Combine&lt;T&gt;(bool @bool = true) { return f =&gt; @bool; }
  }
  
  void Main()
  {
      var data = new[] { 2, 4, 6, 8, 11, 43, 65 };
      var greaterThanFourAndLessThanForty = FuncCombinator.Combine&lt;int&gt;()
          .And&lt;int&gt;(i =&gt; i &gt; 4)
          .And&lt;int&gt;(i =&gt; i &lt; 40);
      data.Where(greaterThanFourAndLessThanForty).Dump("Greater Than Four and Less Than Forty");
  
      var notGreaterThanFourAndLessThanForty = FuncCombinator.Combine&lt;int&gt;()
          .AndNot(greaterThanFourAndLessThanForty);
      data.Where(notGreaterThanFourAndLessThanForty).Dump("Not Greater Than Four and Less Than Forty");
  }
  </code></pre>