問題タブ [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 投票する
1 に答える
1174 参照

f# - f# でボイラープレートを破棄する

私はHaskell プログラミング言語でScrap Your Boilerplateライブラリと Uniplate ライブラリを使用しましたが、判別共用体に対する汎用プログラミングの形式が非常に役立つことがわかりました。f# プログラミング言語に同等のライブラリはありますか?

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

generics - Data.Data -- アリティ 2 型コンストラクタの dataCast1 の生成 (部分的に特殊化)

したがって、Data.Map はdataCast2定義されています。これは、アリティ 2 型のコンストラクターを持っているため、理にかなっています。dataCast1デフォルトはconst Nothingです。dataCast2として簡単に定義されgcast2ます。

参考のため:

Data.Data当面の問題は、次のとおりです。 、Data.Typeableなどのすべてが与えられ、アリティ 2 型のコンストラクタdataCast2が定義されている場合 (たとえば、Map、または)、部分的な特殊化に対して正しいことを行う(,)バージョンを作成することは可能ですか?dataCast1一度に 1 つの特定のコンストラクターに対して、または一般的に、この型コンストラクターの

直観的には、良い解決策があるはずだと思いますが、最初の数回はクラッシュして燃えました。

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

haskell - SYB を使用して型を変換することは可能ですか?

myの名前 (階層識別子を表す) を、モナドの非表示状態として保持されるシンボル テーブルの名前 (整数)renameに置き換える関数を書きたいと考えています。StringASTGUIDRenamer

名前のAST a型でパラメータ化された型があります。AST のリーフにある名前のタイプは次のName aとおりです。

これにより、SYB トランスフォーマーでそれらを簡単にターゲットにすることができます。

パーサーは次のように入力されます (簡潔にするためにエラーの可能性は無視します)。

rename関数を次のように入力します。

SYB を使用して、トランスフォーマーを使用してすべてName Stringのを にName GUID変換することは可能ですか?

からの他のすべての値は、子c Stringc GUID変換し、同じコンストラクターを使用して貼り付けますが、型パラメーターは異なりますか?

everywhereM関数は私が望むものに近いですが、変換はできますが、変換はできませc a -> m (c a)c a -> m (c b)

私のフォールバックソリューション(定型文を手で書く以外)は、型パラメータを から削除し、次のようASTに定義するNameことです:

名前の変更が入力されるように:

で動作させるeverywhereM。ただし、これにより、名前が変更された後も an が 's をAST保持している可能性が残ります。型システムを使用して、名前が変更されたものは名前しか保持できないStrNameという事実を正式に把握したかったのです。ASTGUID

0 投票する
4 に答える
7047 参照

haskell - Haskell の Data.Typeable とは?

Haskell のData.Typeable.

どのような問題をどのように解決しますか?

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

generics - Haskell の "Scrap Your Boilerplate" (SYB) に相当する Clojure

私は Haskell でScrap Your Boilerplateという興味深いライブラリを見つけました。これはSimon Peyton Jonesの論文に基づいており、関数型プログラミング言語で大規模で深くネストされたデータ構造を更新できるコードを効率的に作成する方法のようです。次のようなコードを有効にします。

これにより、大規模で複雑になる可能性のある会社のデータ構造内のすべての人に対して、一定の割合 k で給与が効果的に増加します。

Clojure で同じ種類のプログラミング スタイルを実現する同等のライブラリまたはアプローチはありますか?

たとえば、上で使用した例に相当する Clojure をどのように記述すればよいでしょうか。

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

resharper - CQRS dev 用の Resharper 6 ライブ テンプレート

ddd-cqrs リストでは、Resharper ライブ テンプレートを使用して、CQRS 開発を行っているときに得られるボイラープレート コードを処理するのに役立つ人々について、いくつかのおしゃべりがありました。

これは定型的な狂気を克服するための最良の方法ですか?コミュニティと共有したい人はいますか?

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

haskell - Scrap Your Boilerplate のキャスト演算子の型を理解する

Laemmel と SPJ による2003 年のScrap Your Boilerplate ペーパーの 3 ページにコード スニペットがあります。

そして紙は説明します

つまり、mkT fx は、x の型が f の引数の型と同じ場合、f を x に適用します。

cast fこの論文の前の例のパターンに従って、の型を上記の型と比較してMaybe (b -> b)に評価する必要があると思いますJust gが、これは正しくないようです。

の署名でここで何が起こっているのcast fですか?

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

generics - Haskell クラスの一部ではないボイラープレートを避ける

人工生命実験のフレームワークを開発しています。各種が Agent クラスのインスタンスである限り、フレームワークは複数の種をサポートできます。各エージェントを AgentBox にラップして、基になる型を知らなくても読み書き、使用できるようにします。

これはうまく機能しますが、フレームワークのユーザーが作成しなければならない小さなボイラープレート関数が 1 つあります。これを回避する方法があるかどうか知りたいです。関数の型シグネチャで型変数が言及されていないため、Agent クラスでその関数の既定の実装を提供することはできません。私はボイラープレートで暮らすことができますが、もっと良い方法があるかどうか知りたいです.

これは、私が話していることの最小限の実例です。最後の getRock 関数は、ユーザーに強制的に記述させたくないものです。クラス Agent のすべてのインスタンスは、エージェントを読み取ってボックスにラップする関数を提供する必要があり、実装は常に getRock とまったく同じように見えます。

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

haskell - 三次型構築子(ext3)の型拡張のためのSYB関数を定義する方法は?

Scrap Your Boilerplateパッケージには、Data.Generics.Aliases単項およびバイナリ型コンストラクターの型拡張を可能にする関数があります。特に、との定義がext1ありext2ます。

さて、ext1ext2は型クラスの一部である、、dataCast1とで定義され、通常は機械によって定義されます。しかし、がないので、を定義する簡単な方法がわかりません。dataCast2DataDeriveDataTypeabledataCast3ext3

を定義することは可能ext3ですか?もしそうなら、どのように定義しますか?

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

haskell - 現在のSYBは、新しいタイプのジェネリック関数の拡張を許可していますか?

最初の 2つのScrapYourBoilerplateペーパーでは、一般的なタイプで機能するが、特定のタイプでは特殊なケースがあるジェネリック関数を作成する方法について説明しています。たとえばfromJSONaesonパッケージから、JSONから変換するためのジェネリック関数を定義しますが、listやInt:などのタイプの特殊なケースを提供します。

ただし、3番目のSYBペーパーで指摘されているように、「ジェネリック関数定義の再帰的な結び目が結ばれている場合は、すべてのタイプ固有のケースを一度に提供する必要があります」。次に、この論文は、型クラスのメカニズムを通じてこの制限を解除する方法を提案しています。

最初の2つのSYBペーパーは(いくつかの変更を加えて)sybパッケージの一部ですが、3番目はそうではありません。HackageでのSYBの実装で、すべてのタイプ固有のケースを一度に指定する必要があるという制限を解除する他の方法はありますか?