static members vs module for type in F#? : <p>Suppose I have a type like this: </p>

<pre><code>type Season =
| Spring
| Summer
| Autumn
| Winter
</code></pre>

<p>I want to have a function <code>next</code> that returns the next season: </p>

<pre><code>let next s = 
  match s with
  | Spring -&gt; Summer
  | Summer -&gt; Autumn
  | Autumn -&gt; Winter
  | Winter -&gt; Spring
</code></pre>

<p>There are two places I can put this function. </p>

<p>In a named module: </p>

<pre><code>module Season = 
  let next s = 
    match s with
    | Spring -&gt; Summer
    | Summer -&gt; Autumn
    | Autumn -&gt; Winter
    | Winter -&gt; Spring
</code></pre>

<p>Or as a static member on the type: </p>

<pre><code>type Season =
| Spring
| Summer
| Autumn
| Winter
  with 
    static member next s = 
      match s with
      | Spring -&gt; Summer
      | Summer -&gt; Autumn
      | Autumn -&gt; Winter
      | Winter -&gt; Spring
</code></pre>

<p>What are the reasons to favour each approach? </p>
