問題タブ [recursion-schemes]

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 投票する
1 に答える
297 参照

haskell - gpostpro はどのように「モナドから逃れる」のですか?

recursion-schemesHaskellパッケージのこの非常に抽象的な再帰関数がどのように機能するか (または、実際には、それが何をするか!)を理解しようとしています -このファイルから:

特に、私が理解したいのgは、モナド型コンストラクターに言及している関数をどのように適用し、言及も依存もしていない型mの値を返すのですか? Haskell では任意のモナドからのエスケープは不可能だと思っていました。tm

最初にソース ファイルを Intero にロードして、そのポイント入力機能を使用しようとしましたが、その試みは失敗しました。

次に、 を使用して GHCi にロードし、GHCi を使用cabal replして型推論を支援し、定義のさまざまなビットをコメントアウトして、構成された関数を一度に 1 つずつ型を追跡しようとしました。しかし、 に到達したときfmap、何をコメントアウトすればよいかわかりませんでした。なぜなら、再帰a呼び出しのコメントを外して他のものをコメントアウトした場合、おそらくコンパイルすらできないと思ったからです。部分的にコメントアウトされたの定義a適切なタイプはありません。

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

scala - フリーモナドの最適化

もし私が value を持っている場合、 free モナドによって結合された 2 つの s が 1 つに折りたたまれるようにa: Free[Op, A]、 の構造を「平坦化」することは可能ですか?aOp

コンテキスト:Opのセマンティックは操作が冪等であるため、これを解釈前の最適化ステップとして実行したいと思います。したがって、2 つが「連続して」表示される場合、2 番目は、プログラムのセマンティクスを犠牲にすることなく削除できます。

0 投票する
0 に答える
260 参照

haskell - CoFree を F 代数カタモルフィズムに混ぜるには?

まず、これはhttps://www.schoolofhaskell.com/user/bartosz/understanding-algebrasに基づいて いるため、代数と再帰スキームに慣れていない場合は、コンテキストを読んでください。

単純な式パーサーがあるとします。

成功する場合としない場合があります。例:

私の質問は、

1) 関数を更新してparse、解析位置でノードに注釈を付けます

2) エラーメッセージの前に解析位置を付ける

以下のこれらの新しい機能を上記の機能とどのように統合できますか?

使用例:

これはザイゴモーフィズムでしょうか?多分組織型?どちらも何らかのタイプのゆがみが必要です。

ボーナスポイント:評価が返される可能性があることを確認して、失敗時に短絡するためにエルゴット代数を使用する必要がありLeft Stringますか?

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

haskell - Haskell 高階関数

Haskell の高階関数の宿題があり、少し手こずっています。

最初の質問で助けと説明を得ることができれば、残りを終わらせることができると確信しています.

高階関数 ( mapfold、またはfilter) を使用し、必要に応じてラムダ式を使用f1f2て、f1 (f2 (*) [1,2,3,4]) 5 ~> [5,10,15,20]

私は部分的に適用されたものを使用しなければならないと思ってmap[1,2,3,4]ます[(*1),(*2),(*3),(*4)]

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

haskell - 既に Functor であるデータ型で `Fix` を使用する再帰スキーム?

テキスト エディタRasaの作業を続けています。

現時点では、ビューポート/分割を追跡するためのシステムを構築しています (vim 分割に似ています)。この構造をツリーとして表現するのは、私には自然に思えました。

これはうまく機能し、s をツリーに保存Viewし、それらをトラバース/fmap して変更することができます。これは、レンズ パッケージとも非常によく適合します!

私は最近再帰スキームについて学んでいますが、ツリーは再帰的なデータ構造であるため、これはそれらに適したユースケースのようです。

Fixpoint バージョンを構築するのに十分なほどよく理解できました。

rただし、現在、Functor インスタンスは;によって使い果たされています。

私はいくつかのバリエーションを試しました

しかし、 window は型シノニムであるため、チョークします。

と:

そしてそれも失敗します。

  1. fmap/traverse over を定義することはまだ可能aですか? それとも、再帰スキームのプリミティブを使用してこれらの操作を行う必要がありますか? Bifanctor を実装しますか? インスタンスの実装はどのようになりますか?

残りの型はここにあります。ウィンドウ用の適切な Functor インスタンスがないため、プロジェクトはコンパイルされません...

ありがとう!!