10

私はalgo.monadsfluokittenのドキュメントを見てきました。また、 Jim DueyKonrad Hinsen、およびLeonardo Borgesによるモナドのブログ エントリも読みました。

私が見つけることができる最も近いものは、Konrad Hinsen のライブラリ Monadic IO ストリームです。

これは Haskell で ST を使用した例です

oneST :: ST s Int -- note that this works correctly for any s
oneST = do var <- newSTRef 0
           modifySTRef var (+1)
           readSTRef var

one :: Int
one = runST oneST

私の質問は、Clojureで Haskell から IO モナドを実行することは可能ですか? 例を挙げていただけますか?

4

1 に答える 1

16

この質問に答える方法はいくつかあります。

はい

  • 自明: IO を、副作用を処理する特別な許可を与えるモナド変換子と考えてください。Clojure では副作用の実行は特権操作ではないため、Clojure のモナドはすべて IO モナドです。

  • 致命的: Clojure はチューリング完全であるため、Clojure の IO モナドを含むすべての Haskell を実装できます。Haskell はチューリング完全であるため、Clojure のすべてを Haskell で実装し、IO モナドを公開することができます。

いいえ

  • 哲学的に:型システムと統合しながら純粋性を維持する IO モナドの本質は、Clojure の不純物および動的型付けと互換性がありません。IO モナドを押し付けようとする試みは、Clojure の哲学に反するか、IO モナドを持つことの本質的なポイントを捉えることができません。

多分

  • 部分的に:質問でリンクされている monadic-io-streams ライブラリは、algo.monads ライブラリまたはその前身での使用を意図しています。モナドインターフェースは状態モナドです。Monadic-io-streams は、jailed IO モナディック関数をいくつか提供して、それを操作します。これは、副作用のある他の関数の使用を妨げるものではなく、IO を統合する型システムがなければ、どれがどれであるかを体系的に示す方法はありません。これは IO モナドではありません。IO モナドに似たいくつかのことを行うだけです。これは興味深いが、有用性は疑わしい。

  • いつか: Typed Clojureに興味があります。型システムに副作用が追加された場合、いくつかの目的のためにそれらを構造化された方法で分離し、Typed Clojure に IO モナドのようなものが存在する理由を与えることが望ましいかもしれません。

于 2014-02-19T03:10:06.193 に答える