title: Hi speed via not>>not. Why?
body: <p>I did a dll library plnd.dll for predicate palindrom string:</p>
  
  
  
  <pre class="lang-ml prettyprint-override"><code>let IsPalindromLib (str:string)=
    let rec fn(a,b)=a&gt;b||str.[a]=str.[b]&amp;&amp;fn(a+1,b-1)
    fn(0,str.Length-1)
  </code></pre>
  
  <p>And checked the speed:</p>
  
  <pre class="lang-ml prettyprint-override"><code>#time
  #r "c:/libs/plnd.dll"
  open Plnd
  let IsPalindrom (str:string)=  //equal library function
    let rec fn(a,b)=a&gt;b||str.[a]=str.[b]&amp;&amp;fn(a+1,b-1)
    fn(0,str.Length-1)
  let lst=[1..10000000]|&gt;List.map string
  let _ = lst|&gt;List.filter IsPalindrom //from this code
  // CPU time = 0.250 (+-20)
  let _ = lst|&gt;List.filter (IsPalindromLib) //from library
  // CPU time = 0.500 (+-20)
  let _ = lst|&gt;List.filter (IsPalindromLib&gt;&gt;not&gt;&gt;not) //from library&gt;&gt;not&gt;&gt;not
  // CPU time = 0.250 (+-20)
  </code></pre>
  
  <p>Calling the function defined whithin this code is faster than calling the function in the library, this is normal. But using composition predicate <code>not>>not</code> (boolean) when calling the external function  - <strong>SPEEDS UP ???</strong></p>