 <ol> <li><p>Currying does not hurt. Currying sometimes introduces closures as well. They are usually efficient too. refer to <a href="http://stackoverflow.com/questions/1974586/making-functions-inline-avoids-closure">this question</a> I asked before. You can use inline to boost performance if necessary. </p></li> <li><p>However, your performance problem in the example is mainly due to your code:</p> <p><code>normalize p |&gt; (Set.ofList setElems).Contains</code></p></li> </ol> <p>here you need to perform <code>Set.ofList setElems</code> even you curry it. It costs O(n log n) time. You need to change the type of <code>setElems</code> to F# Set, not List now. Btw, for small set, using lists is faster than sets even for querying. </p>