私は計算式が大好きですが、returnキーワードや!を忘れるなどの単純な間違いを犯します。let!のような表現で そして戻る!、または私は単にdo!を書くのを忘れます。これは、状態を忘れがちで、定義したモナド演算子に焦点を合わせる傾向がある状態モナドでよく発生します。
モナド演算子が「匿名」関数ではなく「モナド型」の型を返すようにすることがあります。これは私の忘れたタイピングを追跡するのに役立ちますが、実際には理想的ではありません。誰かもっと良いトリックがありますか?
私は計算式が大好きですが、returnキーワードや!を忘れるなどの単純な間違いを犯します。let!のような表現で そして戻る!、または私は単にdo!を書くのを忘れます。これは、状態を忘れがちで、定義したモナド演算子に焦点を合わせる傾向がある状態モナドでよく発生します。
モナド演算子が「匿名」関数ではなく「モナド型」の型を返すようにすることがあります。これは私の忘れたタイピングを追跡するのに役立ちますが、実際には理想的ではありません。誰かもっと良いトリックがありますか?
!
典型的なモナドを考えると、型が機能しないため、キーワードの後が欠落している場合、コードはコンパイルされません。例えば:
let sum = async {
let x = async { return 1 }
let y = async { return 2 }
return x + y
}
2つのsを追加しようとしているため、これはコンパイルされませんが、 sをsにAsync<int>
変更するとコンパイルされます。let
let!
同様に、欠落しているを識別するにはreturn
、コンパイラの警告メッセージと奇妙なモナディックタイプに注意してください。
let sum = async {
let! x = async { return 1 }
let! y = async { return 2 }
x + y // warning FS0020
}
この場合、sum
はですAsync<unit>
。これは、コードの他の場所で使用しようとすると明らかになります。または、型アノテーションを使用して、この問題をすぐにキャッチできます。
let sum : Async<int> = async { // error FS0001: type mismatch
let! x = async { return 1 }
let! y = async { return 2 }
x + y // warning FS0020
}