問題タブ [effect-systems]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4252 参照

types - タイプアンドエフェクトシステムとは?

効果システムに関するウィキペディアの記事は現在のところ短いスタブに過ぎず、私は効果システムとは何かについてしばらく疑問に思っていました。

  • 型システムに加えて効果システムを持つ言語はありますか?
  • あなたがよく知っている主流の言語で可能な (仮説的な) 記法は、エフェクトでどのように見えるでしょうか?
0 投票する
3 に答える
337 参照

monads - 純粋関数型プログラミング言語における副作用のメソッド

現時点では、副作用を純粋な関数型プログラミング言語に統合する次の方法を認識しています。

  • 効果システム
  • 続き
  • ユニークなタイプ
  • モナド

モナドは、これを行うための最も効果的で最も一般的な方法であるとよく言われます。

他にどのような方法がありますか? それらはどのように比較されますか?

0 投票する
1 に答える
309 参照

haskell - Exc がメンバーの場合の Control.Eff の MonadPlus インスタンス

モナド変換子では、

拡張可能な効果には、次のようなものはありません

私は無駄にそれを実装しようとしました。これが私がこれまでに持っているものです:

2 つの問題があります。

  • の場合mzero、GHC は次のように文句を言います。

    e0GHC が と一致しないのはなぜeですか?

    回答(コメントで提供):オンにするScopedTypeVariables

  • formplusundefinedの逆関数に置き換える必要がrunExcありますが、拡張効果の API で見つけることができません。私は何か見落としてますか ?

理由a <|> b:内で書けるようにしたいMember (Exc e) r => Eff r a、つまり:

  • 試すa
  • aスローする場合はea、試してくださいb
  • bスローする場合はeb、スローしますmappend ea eb

これにはインスタンスが必要です。そのため、最初にインスタンスAlternativeを実装しようとしています。MonadPlus

注: GHC 7.8.3 を使用しています。

よろしくお願いいたします。

0 投票する
1 に答える
776 参照

haskell - Haskellで「より自由な」エフェクトを作成するにはどうすればよいですか?

単純なインタープリターを、トランスフォーマー ベースのモナド スタックから freer ベースのエフェクトに書き直そうとしていますが、私の意図を GHC の型システムに伝えるのが難しくなっています。

私は現在StateFreshエフェクトのみを使用しています。2 つの状態を使用しており、エフェクト ランナーは次のようになります。

これに加えて、次のタイプの関数 FindMacro を定義しました。

これまでのところ、これはすべて完全に正常に機能します。問題は、私が書き込もうとしたときに発生しますmacroexpand2(まあ、macroexpand1ですが、質問を理解しやすいように単純化しています):

これにより、次のエラーが発生します。

Membersさて、型に注釈を追加できます。

そして今、私はこれを取得します:

私はircで試してみるように勧められましforall r v w.たが、違いはありませんでした。好奇心から、このIncoherentInstancesコードをコンパイルするときに使用してみました (フリーアのフォークをチェックして遊んでみたいとは思いませんでした)。それはしませんでした:

ですから、ここで freer の内部構造についての私の理解が尽きて、質問があります。

  1. 重複するインスタンスがあるのはなぜですか? それがどこから来ているのかわかりません。
  2. IncoherentInstancesは実際に何をしますか? 自動選択は、デバッグが困難なエラーを引き起こす可能性がかなり高いようです。
  3. 別の関数内で実際に findMacro を使用するにはどうすればよいですか?

乾杯!