問題タブ [scrap-your-boilerplate]

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 に答える
607 参照

haskell - 最後の型引数ではなく、ファンクター インスタンスを派生させる

今日私が以前に尋ねたこの質問に関連しています。

「注釈」タイプによってパラメーター化された、多数のケースを持つ AST データ型があります。

def と var の具体的なインスタンスがDefありVarます。

私が望むのはfmap、最初の引数でファンクターとして機能するものを自動的に導出することです。次のような関数を導出したいと思います。

normal を使用するfmapと、fmap がその関数を最初ではなく最後の型引数に適用しようとしていることを示すコンパイラ メッセージが表示されます。

定型文をたくさん書かずに、説明されているように関数を派生させる方法はありますか? 私はこれをやってみました:

しかし、次のエラーが表示されます。

私は他の誰かのコード ベースで作業しているので、どこでも型引数の順序を切り替える必要がなければ理想的です。

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

haskell - 「スクラップ・ユア・ボイラープレート」とは?

Scrap Your BoilerplateやHaskellでのジェネリック プログラミングについて話している人を見かけます。これらの用語はどういう意味ですか? Scrap Your Boilerplate を使用するのはいつで、どのように使用すればよいですか?

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

haskell - Data.Data.Data から gfoldl の型シグネチャを理解する

Dataコア関数の 1 つとして定義されますgfoldl

cその目的は何c (d -> b)ですか?通常の折り方ではないのはなぜですか

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

haskell - SYB: listify の結果に対するマップを gfoldl で書き換えることはできますか?

SYB の gfoldl を使用して、listify の結果を一度にマップできますか?

たとえば、次のコードを考えてみましょう。

numVal 関数では、Num コンストラクターだけに関心があるのに、Expr 型のさまざまなデータ コンストラクターを考慮しなければならないのが好きではありません。isNum と numVals を以下の vals 関数のようなものに置き換えます。

これは gfoldl で実行できますか? どのように?

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

haskell - SYBと共にGHC ASTを訪問

Haskell-src-exts で AST を訪問するプログラムを書きました。GHC APIを使用するように変換しようとしています。前者は Uniplate を使用していますが、後者については残念ながら SYB を使用せざるを得ないようです (ドキュメントは恐ろしく不足しています)。

元のコードは次のとおりです。

関数バインディング、一致、および式にアクセスする必要があります。これは私が書くことができたものです(動作していません):

のインスタンスが多すぎると不平を言っていますがid、それが何であるかはわかりません。関連するGHCモジュールは次のとおりです。

私はこれから気が狂います。目標は、複雑さを数えることです (元のコードでわかるように)。GHC API はコンパイラと同じパーサーを使用しているため、拡張子を気にせずにすべてのモジュールを解析できるため、GHC API に切り替えたいと考えています。

編集:現在のコードが機能しない理由は次のとおりです。

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

haskell - HaskellのData.DataパッケージのConstr型を理解する

Data.Data パッケージの Constr 型を理解しようとしています。以下のセッションを検討してください。Maybe の 0 引数コンストラクタと 1 引数コンストラクタの両方dataTypeConstrsのリストを返します。Constrリストを再作成しようとすると、明らかな型エラーが原因で失敗します。Constr 値に関する GHC の特別な動作ですか?

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

scala - Shapeless で Scrap Your Boileplate コンビネータ「すべて」を使用して Seq をトラバースする方法は?

Shapeless で Scrap Your Boilerplate 実装を使用して一部のケース クラスを操作したいのですが、SYB コンビネータeverythingが type のフィールドをトラバースする方法を見つけようとして立ち往生していSeq[...]ます。

たとえば、次のようなツリーを定義します。

葉の数を数えるには、次のようにするとうまくいきます

ただし、Seqフィールドの代わりに子を格納するためにa を使用する場合Node

次にeverything、フィールド children をトラバースできません:

いろいろ試してみましたが、何もうまくいきませんでした。Dataforの正しいインスタンスを記述する方法もわかりませんでしたSeq[...]

UPDATE : fromのDataインスタンスを適応させるとうまくいくようですListshapeless.Data