Skip to content

Map, Bind, Apply のまとめ

このシリーズは、当初の予定よりも長くなってしまいました。最後までお付き合いいただき、ありがとうございます!

この議論が、mapbindといった様々な関数の変換について理解を深める上で、参考になったことを願っています。世界をまたぐ関数を取り扱う上での有用なテクニックも、少しは理解いただけたのではないでしょうか。 もしかしたら、m-wordの神秘性も、少しは解けたかもしれませんね。

これらの関数を自分のコードで使ってみたいと思った方は、その実装がいかに簡単かお分かりいただけたと思います。 sしかし、これらの関数やさらに多くの機能を含む優れたF#ユーティリティライブラリの使用も検討してみてください:

  • ExtCore (ソース, NuGet). ExtCoreはF#コアライブラリ(FSharp.Core)を拡張し、実用的なF#アプリケーションの構築をサポートすることを目的としています。 これらの拡張には、Array、List、Set、Mapなどのモジュールの追加関数、不変のIntSet、IntMap、LazyList、Queueコレクション、 様々なコンピュテーション式(ワークフロー)、 そして「ワークフローコレクション」(ワークフロー内でシームレスに動作するように適応されたコレクションモジュール)が含まれます。

  • FSharpx.Extras (ホームページ). FSharpx.ExtrasはFSharpxシリーズのライブラリの一部です。 いくつかの標準的なモナド(State、Reader、Writer、Either、Continuation、Distribution)、 アプリカティブファンクターによるバリデーション、flipのような一般的な関数、非同期プログラミングユーティリティ、 そしてC# - F#の相互運用を容易にする関数を実装しています。

たとえば、この投稿で実装したモナディックな走査List.traverseResultMは、すでにExtCoreで ここで利用可能です。

このシリーズが気に入った方は、「フランケンファンクター博士とモナド怪物」シリーズでStateモナドについての投稿や、 「鉄道指向プログラミング」というトークでEitherモナドについての説明もご覧いただけます。

最初に述べたように、これを書くことは私にとっても学習プロセスでした。 私も専門家ではありませんので、もし間違いを見つけられたら、ぜひご指摘ください。

ありがとうございました!

このシリーズで触れた様々な関数へのショートカットリストです:


付録:言及した演算子のリスト

Section titled “付録:言及した演算子のリスト”

関数型プログラミング言語は、オブジェクト指向言語と違って変わった演算子が多いことで知られています。 そこで、このシリーズで使用された演算子を、関連する議論へのリンクとともにドキュメント化することが役立つと考えました。

演算子同等の関数議論
>>左から右への合成このシリーズの一部ではありませんが、ここで議論されています
<<右から左への合成上記と同様
|>左から右へのパイピング上記と同様
<|右から左へのパイピング上記と同様
<!>mapここで議論されています
<$>mapHaskellのmap演算子ですが、F#では有効な演算子ではないため、このシリーズでは<!>を使用しています。
<*>applyここで議論されています
<*-片側の結合子。ここで議論されています
*>-片側の結合子。ここで議論されています
>>=左から右へのbindここで議論されています
=<<右から左へのbind上記と同様
>=>左から右へのKleisli合成ここで議論されています
<=<右から左へのKleisli合成上記と同様


代替チュートリアル:

学術的な方向け:

F#の例: