今朝、 「F# のインデントガイドライン」に寄せて という記事がアップされてましたので、便乗します。
単純に「私はこんなインデントルールでやっています」というオレオレを書いておきたいだけです。大元の F# のインデントガイドライン と一緒のものについては省略します。
個人開発では2スペースインデントで、FSharpxを触るときは4スペースインデントです。
elifを使うときは @gab_km さんみたいなルール、それ以外のときは if 式の長さで決めています。
パイプライン演算子にあわせて、
let funfunfun hoge b =
hoge
|> huga
|> piyo
|> foo
|> if bar then List.cons b else id
としたりすることも稀にあります。よほどのことがないとこの状況に遭遇しないとは思いますが・・・。
パターンマッチは次のように書いています。
let funA x =
match x with
| 0 -> "zero"
| _ -> "not zero"
function 式については、個人開発では
let rec fac = function
| 0 -> 1
| n -> n * fac (n - 1)
というスタイルで統一しています。引数のパターンマッチなのでインデント下げたくない、みたいな理由だった気がします。
FSharpxでは、
let rec fac = function
| 0 -> 1
| n -> n * fac (n - 1)
もしくは
let rec fac =
function
| 0 -> 1
| n -> n * fac (n - 1)
にしています。ファイルの中身にあわせて書き分けていたような、そうでもないような。
判別共用体の書き方は、私は次のように書いています。
type Verbosity =
| Quiet
| Normal
| Verbose
パターンなのだから全部に縦棒をいれたいというのは、個人的趣味です。極まれに
type Ordering = | LT | EQ | GT
と書くこともありますが、短い場合限定ですね。
なんというか、差分が@gab_kmさんと同じところになったのは偶然か必然か・・・ともかく、読みやすいかどうかは人それぞれなので、開発メンバーで相談したり公開/非公開にあわせて柔軟に切り替えるのがいいのかもしれませんね。