Хочется описать пару занятных особенностей синтаксиса F#, построенного на отступах, о которых не все могут знать. Не смотря на то, что обычно блоки должны располагаться на одном уровне отступа, из этого правила есть исключения:

let x =
      11.1
    + 22.2
    * 33.3
   ** 44.4
    / 55.5

Инфиксные операторы (на самом деле любые инфиксные токены) могут располагаться слева от общего уровня отступа блока, причём левее ровно на количество символов записи оператора, увеличенное на единицу (то есть после оператора допустим только один пробел). Это иногда может позволять лучше вырванивать код, состоящий из кучи применений оператора (|>), например:

// функция, не делающая ничего вразумительного
let someFunction count =

      let someSequnce = { 0 .. count }

      someSequnce
   |> Seq.map ((+) 10)
   |> Seq.toList
   |> function
      | [ 10; 11; x ] when x > 11 -> true
      | _                         -> false

   |> printfn "Ответ: %b"

Существует так же исключение для and в let rec-биндингах:

let rec xs = { 0 .. 100 }
and ys = { 0 .. 200 }

Здесь and может быть выровнен на одном уровне с let и это не будет считаться ошибкой. Внутри определений типов аналогичным поведением обладают токены |, }, end и and:

type Foo =
| CaseA
| CaseB
| CaseC

and // ok
    Bar(x : int) = class

    member baz.M() = ()

end // ok

type Baz = { x : int
} // ok