問題タブ [vinyl]
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 - Vinyl: レコード タイプのエイリアスを作成する
Vinyl では、レコードのタイプ エイリアスを定義して、他のモジュールへのエクスポートを容易にすることができます。
ここで、高さを格納する別のフィールドを追加するとします。
と を含むレコードの型エイリアスをうまく構築したいと思いPerson
ますheight
。単純に、それは次のようになります。
この構文は明らかに機能しません。これを行う方法はありますか?ここで使用されていると思われる型レベルの配列構文を説明する参考文献はありますか?
haskell - ヴァイナルの ISubset の問題
次のコードがあります。
タイプを取り除くと、drawObject
問題なくコンパイルされますが、タイプを取得すると
GHCが私のために推測するタイプは
そして、それは型シグネチャとしてうまく機能しますが、 を持つものはそうでISubset
はありません。引数を に交換しても、エラーはまったく同じですISubset
。ここで何が起こっているのですか?
haskell - ビニール レコードを種類別に絞り込む
ビニール ライブラリを使用して、レコードのセットをタイプまたはその他のプロパティで除外する方法はありますか? シェーダー ユニフォームの値をオブジェクトの他のプロパティと混合し、後でそれらを抽出して呼び出すことができるようにしたいと考えていますGraphics.VinylGL.Uniforms.setAllUniforms
。HList
IMO ビニールの方が優れているので、使用したくありません。
haskell - プロキシ、タイプ レベル シンボル、および JSON
自動 json 解析を Data.Vinyl に追加しようとしています
以下は、要素が 1 つだけのレコードの FromJSON のインスタンスです。
ほとんど機能しますが、KnownSymbol 制約を満たすことができません。新しい型変数が自動生成されるようです。
エラーは
詳細なコンテキストhttp://lpaste.net/101005
のすべてのインスタンスを に置き換えるsym
と"name"
、機能し、実行され、素晴らしいものになります。ここで、テンプレート Haskell を使用して事前にすべてのインスタンスを生成することができました。これは、実際に使用するフィールド名のクローズド リストがあるためですが、それは非常に残念なことのように思えます。Data.Proxy のレコードの show インスタンスを定義するために使用されているのを見たばかりなので、Data.Proxy についてほとんど何も知りません。
haskell - 特定のフィールドを持つ Vinyl レコードに適用される制約を宣言する
私はvinylを使用して、いくつかの異なるレコード タイプを宣言しています。その中にContent
は、特定のタイプで呼び出されるフィールドがあるものもありますLanguageContent
。レコードに存在するフィールドに依存する関数については、次のような型が必要です。
(説明のためだけに与えられた関数。何かを取得し、それを使用してさまざまなことを行う多くの関数がありますHasContent
。)
HasContent
ここで、制約として宣言する必要があります。私が使用できる最も近いData.Vinyl.Notation
ものは次のとおりです。
型ファミリは宣言できますが、関数は型チェックを行いません:
機能するが理想的ではない2つのパラメーターを使用して制約を作成できます(rs
は、どこでも繰り返す必要があるパラメーターです)。
追加のパラメーターがなければ (@ChristianConkle の回答を参照)、次のようになります。
Rec Attr fs
そのようなものだけに当てはまる制約を宣言するにはどうすればよいContent ∈ fs
ですか?
haskell - 伴意によるビニールの RecAll 制約の弱体化
ヴァイナルライブラリには型RecAll
ファミリがあります。型レベル リストのすべての型に対して、部分的に適用された制約が真であることを確認してみましょう。たとえば、次のように記述できます。
そして、それはすべて素敵です。ここで、が不明な制約RecAll f rs c
があり、(ekmett のcontstraintsパッケージから言葉を借りるために)含意を知っている場合、どうすれば を取得できますか?c
c x
d x
RecAll f rs d
私が尋ねる理由は、いくつかの型クラスの制約を満たす必要があるいくつかの関数でレコードを扱っているからです。これを行うために、 existsパッケージのControl.Constraints.Combineモジュールの:&:
コンビネーターを使用しています。(注: の非常に古いバージョンに依存しているため、他のものがインストールされている場合、パッケージはビルドされません。ただし、言及した 1 つのモジュールをコピーするだけでかまいません。) これにより、最小化しながら、いくつかの本当に美しい制約を取得できますタイプクラスのブロイラープレート。例えば:contravariant
しかし、この関数の本体内で、より弱い制約を要求する別の関数を呼び出します。次のようになります。
GHC は、2 番目のステートメントが最初のステートメントから続くことを認識できません。そうなのだろうと思いました。私が見ることができないのは、それを具体化して GHC を助けるためにそれを証明する方法です。これまでのところ、私はこれを持っています:
これらは正常に動作します。しかし、これは私が立ち往生しているところです:
これはコンパイルされません。私が探している効果を得る方法を知っている人はいますか。エラーが参考になる場合は、ここにエラーがあります。また、私はDict
実際のコードに修飾されたインポートを持っているので、それが言及されている理由Constraint.Dict
です: