問題タブ [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.
haskell - 最後の型引数ではなく、ファンクター インスタンスを派生させる
今日私が以前に尋ねたこの質問に関連しています。
「注釈」タイプによってパラメーター化された、多数のケースを持つ AST データ型があります。
def と var の具体的なインスタンスがDef
ありVar
ます。
私が望むのはfmap
、最初の引数でファンクターとして機能するものを自動的に導出することです。次のような関数を導出したいと思います。
normal を使用するfmap
と、fmap がその関数を最初ではなく最後の型引数に適用しようとしていることを示すコンパイラ メッセージが表示されます。
定型文をたくさん書かずに、説明されているように関数を派生させる方法はありますか? 私はこれをやってみました:
しかし、次のエラーが表示されます。
私は他の誰かのコード ベースで作業しているので、どこでも型引数の順序を切り替える必要がなければ理想的です。
haskell - 「スクラップ・ユア・ボイラープレート」とは?
Scrap Your BoilerplateやHaskellでのジェネリック プログラミングについて話している人を見かけます。これらの用語はどういう意味ですか? Scrap Your Boilerplate を使用するのはいつで、どのように使用すればよいですか?
haskell - SYB: listify の結果に対するマップを gfoldl で書き換えることはできますか?
SYB の gfoldl を使用して、listify の結果を一度にマップできますか?
たとえば、次のコードを考えてみましょう。
numVal 関数では、Num コンストラクターだけに関心があるのに、Expr 型のさまざまなデータ コンストラクターを考慮しなければならないのが好きではありません。isNum と numVals を以下の vals 関数のようなものに置き換えます。
これは gfoldl で実行できますか? どのように?
haskell - SYBと共にGHC ASTを訪問
Haskell-src-exts で AST を訪問するプログラムを書きました。GHC APIを使用するように変換しようとしています。前者は Uniplate を使用していますが、後者については残念ながら SYB を使用せざるを得ないようです (ドキュメントは恐ろしく不足しています)。
元のコードは次のとおりです。
関数バインディング、一致、および式にアクセスする必要があります。これは私が書くことができたものです(動作していません):
のインスタンスが多すぎると不平を言っていますがid
、それが何であるかはわかりません。関連するGHCモジュールは次のとおりです。
私はこれから気が狂います。目標は、複雑さを数えることです (元のコードでわかるように)。GHC API はコンパイラと同じパーサーを使用しているため、拡張子を気にせずにすべてのモジュールを解析できるため、GHC API に切り替えたいと考えています。
編集:現在のコードが機能しない理由は次のとおりです。
haskell - HaskellのData.DataパッケージのConstr型を理解する
Data.Data パッケージの Constr 型を理解しようとしています。以下のセッションを検討してください。Maybe の 0 引数コンストラクタと 1 引数コンストラクタの両方dataTypeConstrs
のリストを返します。Constr
リストを再作成しようとすると、明らかな型エラーが原因で失敗します。Constr 値に関する GHC の特別な動作ですか?
scala - Shapeless で Scrap Your Boileplate コンビネータ「すべて」を使用して Seq をトラバースする方法は?
Shapeless で Scrap Your Boilerplate 実装を使用して一部のケース クラスを操作したいのですが、SYB コンビネータeverything
が type のフィールドをトラバースする方法を見つけようとして立ち往生していSeq[...]
ます。
たとえば、次のようなツリーを定義します。
葉の数を数えるには、次のようにするとうまくいきます
ただし、Seq
フィールドの代わりに子を格納するためにa を使用する場合Node
次にeverything
、フィールド children をトラバースできません:
いろいろ試してみましたが、何もうまくいきませんでした。Data
forの正しいインスタンスを記述する方法もわかりませんでしたSeq[...]
。
UPDATE : fromのData
インスタンスを適応させるとうまくいくようですList
shapeless.Data