最小のコンピュテーション式

メモ。

使う規則

T(e;, V, C, q) = C(e;b.Zero())

この規則がvalidなコンピュテーション式を作れるはず。 Zeroメソッドのみを用意すれば良いのでBuilderの実装も最小限なはず?*1

コード

// 定義
type A() = member x.Zero()=()
let a = A()

// 実際に試す
a { () }

F# 4.0のfsiで確認。

  • ビルダーのクラス名に制限はない
  • 束縛名にも制限はない

なので一文字でも問題なく判別可能です。

公開後の追記

単にビルダーインスタンスを返すだけなのでこっちが正しいですね。 自分でxにしておきながら気付いてなかったです…失礼しました。

zeclさん、指摘ありがとうございました。

番外編

バッククオート2つで囲めばIdentifierにできるので、(たぶん)絵文字も可能です。

type ``🍣``() = member x.Zero()=()
let ``🍣`` = ``🍣``()

``🍣`` { () }

表示されない場合は環境の問題でしょう。

*1:と思っていたらミスしてました。追記部分を読んでください