title: Why Seq.tail is not an option
body: <p>My question is when entering <code>Seq.</code> why is there no <code>Seq.tail</code> function?</p>
  
  <p>In this code that does not convert a sequence to a list, there is no <code>Seq.tail</code> function available in the recursive function. Is it because <code>Seq.initInfinte</code> was used to to create the sequence, or is there another reason?</p>
  
  <pre><code>open System
  let readList() =
      Seq.initInfinite (fun _ -&gt; Console.ReadLine())
      |&gt; Seq.takeWhile (fun s -&gt; (s &lt;&gt; ""))
      |&gt; Seq.map (fun x -&gt; Int32.Parse(x))
  
  let rec listLen list1 acc =
      if Seq.isEmpty list1 then
          acc
      else
          (* There is no Seq.tail available. Compile error. *)
          listLen (Seq.tail list1) (acc + 1)
  
  [&lt;EntryPoint&gt;]
  let main argv = 
      let inList = (readList())
      let inListLen = listLen inList 0
      printfn "%A"  inListLen
  
      0 // return an integer exit code
  </code></pre>
  
  <p>However, this works just fine. I'm confused about why <code>Seq.tail</code> is not available, but <code>List.tail</code> is available.</p>
  
  <pre><code>open System
  
  let readList() =
      Seq.initInfinite (fun _ -&gt; Console.ReadLine())
      |&gt; Seq.takeWhile (fun s -&gt; (s &lt;&gt; ""))
      |&gt; Seq.map (fun x -&gt; Int32.Parse(x))
  
  let rec listLen list1 acc =
      if List.isEmpty list1 then
          acc
      else
          listLen (List.tail list1) (acc + 1)
  
  [&lt;EntryPoint&gt;]
  let main argv = 
      let inList = Seq.toList (readList())
      let inListLen = listLen inList 0
      printfn "%A"  inListLen
  
      0 // return an integer exit code
  </code></pre>