 <p>Why not simply use </p> <pre><code>let l=[1;2;5;3];; Seq.findIndex (fun x -&gt; x= Seq.max l) l ;; </code></pre> <p>?</p> <p>Or maybe as Johan Kullbom suggest in a comment:</p> <pre><code>"let m = Seq.max l in Seq.findIndex (fun x -&gt; x = m) l" </code></pre> <p>if you what a little better O(n)</p> <p>However, the need to get the index looks to me like a imperative "code smell" .</p> <p>In FP it's usually better to use existing functions before you roll your own. I now this in the eyes of a C programmer seems like a for(i (for(j construct but I bet that you probably really don't need to know the index if you start think in FP.</p> <p>More or less a duplicate of <a href="http://stackoverflow.com/questions/1496980/finding-index-of-element-in-a-list-in-haskell">Finding index of element in a list in Haskell?</a></p> <p>PS. I can't resist. In Haskell (ghc) the way should probably be something like</p> <pre><code>let cmpSnd (_, y1) (_, y2) = compare y1 y2 let maxIndex l= fst $ maximumBy cmpSnd $ zip [0..] l </code></pre> <p>However, since zip in F# doesn't seem to allow zip with unequal lengths of the list(?) the use of mapi is probably the way to go (my haskell version in F#)</p> <pre><code>let cmpSnd xs= snd xs ;; let zipIndex a= Seq.mapi (fun i x -&gt; i,x) a;; let maxIndex seq=fst (Seq.maxBy cmpSnd (zipIndex seq));; </code></pre> <p>and the reason is only so that I can make a list </p> <pre><code>let l= [[0;199;1];[4;4];[0;0;399]] </code></pre> <p>test with makeIndex l;; and decide that what I really want is a</p> <pre><code>let cmpSnd' (a,(xs: int list)) = Seq.sum xs;; let maxIndex' seq=fst (Seq.maxBy cmpSnd' (zipIndex seq));; </code></pre> <p>Now time to decomposite and make makeIndex take a function </p> <pre><code>let maxIndexF seq maxF=fst (Seq.maxBy maxF (zipIndex seq));; val l : int list list = [[1; 2; 199]; [3; 3]; [4; 1]; [0; 299]] &gt; maxIndexF l cmpSnd' ;; val it : int = 3 &gt; maxIndexF l cmpSnd ;; val it : int = 2 </code></pre> <p>Finish it up</p> <pre><code>let maxIndexF' maxF=fst &lt;&lt; Seq.maxBy maxF &lt;&lt; zipIndex ;; maxIndexF' cmpSnd' l;; maxIndexF' cmpSnd l;; </code></pre>