問題タブ [deriving]
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 - タイプとその依存関係の導出
バグを回避するために、インデックスのnewtypeラッパーで遊んでいますが、次のようなコードがあります。
を導出するIntegral
には、そのすべての依存関係も導出する必要があります(したがって、上記の型クラスのリスト)。
Integral
それに伴うすべての依存関係を派生させる方法はありますか?私は次のようなものを想像します:
haskell - Haskellで派生はどのように機能しますか?
Haskellの代数的データ型(ADT)は、それらから派生することにより、いくつかのタイプクラス(Show
、などEq
)。
私の質問は、これはderiving
どのように機能するのか、つまり、Haskellは派生ADTの派生型クラスの関数を実装する方法をどのように知っているのかということです。
また、なぜderiving
特定の型クラスのみに制限されているのですか?派生可能な独自の型クラスを記述できないのはなぜですか?
haskell - Eqインスタンスにはいくつかの奇妙な比較があります
Pixel
タイプをととしてColor
定義する画像処理モジュールを作成しましたLocation
。複数の画像間でピクセルを比較したい場合があるのでPixel
、、、Color
およびLocation
派生します。Eq
Eq
ピクセルを比較して、それらが完全に類似しているかどうかを確認するという私のニーズに合っています。これが私が望んでいたことです。インスタンス化の奇妙な副作用Eq
は、2つの異なるピクセルを同じまたはのLocation
いずれか<=
と比較すると、、、、およびの>=
結果にTrue
なります。False
==
<
>
次に、ghciでいくつかのテストを行います。
Ord
私のaの定義Pixel
がこれらの比較に影響を与えたようですが、これは理解できることです。dLocation
は、比較に影響することを示しています。私が混乱しているのは、 aが、、、またはでなくてもb>=
と<=
bの両方であるということです。==
<
>
編集:誰かがこのコードのいずれかを使用したい場合に備えて、問題を修正するこのスニペットを含めます。必ず定義から削除Eq
してください。Pixel
これにより、の比較Location
のみが可能になります。楽しみ!:)
haskell - GeneralizedNewtypeDeriving インスタンスの 1 つまたは 2 つのメソッドをカスタマイズする方法はありますか?
Haskell の GeneralizedNewtypeDeriving メカニズムは優れています。見ていない人のために、次のように書いてください。
のようなインスタンスを自動的に生成します。
ただし、私の型クラスの 1 つで、いくつかのメソッドをカスタマイズしたいと考えています。これらのメソッドに対して GeneralizedNewtypeDeriving が行うことをオーバーライドまたは無効にする方法はありますか? for
型クラスは、(ループ)、parfor
(並列ループ)、 (新しい関数の追加)などのいくつかの基本的な DSL 命令をエンコードしますfcndef
が、それを複数の型クラスに分割する完全な方法はありません [その後、自動的に派生します。一方は手動で作成し、もう一方は手動で記述します]。
serialization - Data.Binary (または友人) の Template Haskell / 派生メカニズムはありますか?
Data.Binary
ドキュメントには、手動でインスタンスを作成することが示されています。これを回避する方法はありますか?(テンプレート Haskell ベースの) 派生メカニズムを持つ別のライブラリ、SerTH があるのを見ましたが、それへのリンクは壊れているようです。また、他のライブラリを知っている場合は、優れたパフォーマンスが重要です。
前もって感謝します!
haskell - 新しい Data.Derive インスタンス ジェネレーターを作成する方法は?
Data.Derive インスタンス ジェネレーターを作成する方法の段階的なチュートリアルを知っている人はいますか? 既存の派生インスタンス ジェネレーターの使用方法については、多くのドキュメントがあるようです。
Data.Derive に慣れていない人 (または、特によくわからない場合) のために、これが私がやりたいことです。次のような単純な newtype の例を考えると、
これらすべてのインスタンス (および Constraints データ ファミリ) を生成したいと考えています。それらは文字列 "WrapperT"、"WrapperTE"、および "StateT Integer α" によってほとんどパラメータ化されています。
haskell - Haskell -- 「派生」インスタンスの場合に再バインド可能な構文をオフにする方法はありますか?
派生インスタンスもRebindableSyntax
拡張機能の影響を受けるという厄介な「機能」があります。私が書きたいものの例:
これにより、「 Not in scope: `ifThenElse' 」というエラーが発生します。
haskell - haskell-ほぼタプル同型のデータ型の「派生」インスタンスを生成する方法はありますか?
私が次のようなデータ型を持っているとしましょう
と型クラス
それでは、書けるようになりたい
インスタンスを生成します。
モジュロ遅延評価同型を使用することにより、
注。ニュータイプを使用しておりGeneralizedNewtypeDeriving
、たとえば、が存在する場合は機能しませんdata D m = D (m Integer) (m Integer)
。
注2。この質問は、一般的にHaskellの表現力に関連しています。Pythonのような言語には、名前付きタプルと呼ばれるものがあり、タプルが使用される場所ならどこでも使用できます。この質問は、Haskellで同じことをエミュレートする方法がどこで/どのようにわからないかを示しています。
c# - C# の Entity Framework によって生成されたクラスからの派生
エンティティ データ モデルを作成し、そこからデータベースを生成しました。
エンティティの 1 つが と呼ばれTemplate
ます。
正常に動作する機能を拡張するために部分クラスを作成しましたTemplate
。
新しいクラスを作成してから派生させようとするとTemplate
、インスタンス化時に実行時例外が発生します。
Mapping and metadata information could not be found for EntityType 'Template001'
.
どうすればこれを回避できますか? 私は間違いなくEFクラスから継承する必要があります。
編集
可能ではないようです。その場合、次の要件を実装する最善の方法は何でしょうか: テンプレート エンティティには、実行する独自のコードを持つテンプレートに関する情報が格納されます。それが、そもそもエンティティから派生させようとしていた理由です。
haskell - 関連付けられたタイプの同義語を使用したData.Vector.Unboxの自動派生
私はデータ型を持っています
ここで、「q」はクラスのインスタンスになります
'IntType'は、'q'に関連付けられた基底表現(つまり、Int、Integralなど)です。
ZqをData.Vector.Unboxのインスタンスにしたい。上記のリンクで提案されているように、現在、約50行の簡単なコードを使用してUnboxを手動で導出しています。コードでいくつかの異なるタイプの「Unbox」を作成するため、タイプごとに50行を書き込むのは魅力的ではありません。
ここで2つの選択肢を見つけました。1つの代替手段は、テンプレートHaskellを使用してUnboxのインスタンスを派生させるこのパッケージを使用することです。THコードは次のようになります。
問題は、関連付けられたタイプの同義語を使用してインスタンスを定義できないことです(またはできますか??)
[関連する質問:FlexibleInstancesによって暗示される拡張機能であるTypeSynonymInstancesが、関連付けられたタイプの同義語インスタンスを許可しないのはなぜですか?これはどういうわけか根本的に別の獣ですか?]
その問題に対する私の現在の解決策は、Zqを次のように再定義することです。
次に、等式制約を追加します
(Zq qi)を含むすべてのインスタンスで、これはあまりエレガントではありません。私の(作業中の)Unboxの派生は
タイプ「i」を明示的に公開することなく、これを達成できるはずだと思います。私が行ったのは、関連付けられた型の同義語から、等式制約のある明示的なパラメーターに移動することだけです。なぜこれが「基本的に」異なる(そして明らかに安全な)アプローチなのですか?タイプパラメータ「i」の追加を回避し、それでも自動Unbox派生を取得できる方法はありますか?
追加の型パラメーターは別として、THパッケージを使用して(Vector r)のUnboxを導出するのに問題があります。つまり、UnboxVectorのUnboxVectorを作成したいと思います。私の試みは次のようなものです。
しかし、私は次のような(たくさんの)エラーを受け取ります:
私のZqタイプで問題なく機能するのに、なぜこのメソッドが見つからないのかわかりません。
上記の2番目のアプローチは、拡張機能GeneralizedNewtypeDerivingを使用することです。このアプローチで私が目にする最大の問題は、Unboxにする必要のある実際のデータ(Newtypeではなく)があることです。ただし、拡張機能を使用するだけで、次のように記述できるはずです。
または少なくとも
最初はエラーにつながります:
そして2番目は与える:
上記の投稿から、派生できるはずだと私は信じているので、なぜこれらのインスタンスを派生できないのかわかりません。おそらく、GeneralizedNewtypeDerivingで関連付けられた型の同義語を使用することで逃げることができますか?(これでも(おそらく)データのUnboxを導出する必要がある場合、問題は解決しません。)
ご協力いただきありがとうございます!