web-dev-qa-db-ja.com

「Free Monad + Interpreter」パターンとは何ですか?

特にデータアクセスのコンテキストで、Free Monad with Interpreterについて話している人々を見てきました。このパターンは何ですか?いつ使用したいですか?それはどのように機能し、どのように実装しますか?

this などの投稿から)モデルとデータアクセスを分離することについて理解しています。よく知られているリポジトリパターンとどう違うのですか?彼らは同じ動機を持っているように見えます。

96

フリーモナドは基本的に、より複雑なことをするのではなく、計算と同じ「形状」でデータ構造を構築するモナドです。 ( オンラインで見つかる例があります。 )次に、このデータ構造は、それを使用して操作を実行するコードに渡されます。*リポジトリパターンについては完全には詳しくありませんが、 私が読んだもの それはより高いレベルのアーキテクチャのようであり、無料のモナド+インタプリタを使用して実装できます。一方、無料のモナド+インタープリターは、パーサーなどのまったく異なるものを実装するためにも使用できます。

*このパターンはモナドに限定されないことに注意する価値があります。実際、無料のapplicativesまたは free arrows でより効率的なコードを生成できます。 ( パーサーはこの別の例です。

15
Dan