問題タブ [data-kinds]

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 投票する
0 に答える
167 参照

haskell - 複雑な GADT の促進

私は-XDataKinds最近いじっていましたが、なぜFoo以下が自動的に昇格されないのか疑問に思っていました:

つまり、Bazは の異種リストでありFoo aaは によって制約されBarます。

このデータ型のプロモート バージョンを手動で作成する方法はありますか? どうすればそうすることができますか?種類を宣言できますか? のダミーの Haskell98 バージョンを作成して、Fooそれをモジュールか何かに分離できますか? 理想的には、制約コンテキストを保持したいのですが、Constraint並べ替えはないと思います。どんなアイデアでもとても役に立ちます!

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

haskell - 異常な種類とデータ コンストラクター

なぜこれに気付かなかったのかはわかりませんが、データ コンストラクターと関数定義は同様に、の種類の署名により、 の種類の下でも、*バリアント* -> *などの種類以外の型を使用できません。(->)-XPolyKinds

これが私が試したコードです:

私が得ているエラーは次のとおりです。

非伝統的な種類とのパターン マッチングを許可してはならないのはなぜですか?

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

haskell - HList と DataKinds、kind 昇格不可

大量の GHC 拡張機能を使用するこのコード スニペットがあります。

GHC は次のように訴えています。

HList種類を昇格できないのはなぜですか? GHC7.8.2とを使用しても同じエラーが発生します7.11

もちろん、ビルトインを使用しても'[]問題なく動作します。

実際には追加がサポートされており、次のようになっているため、HList代わりに自分のものを使用したいと思います。'[]HList

EDIT:主な目標は、GHCに推論させることです

書けるように

型レベルのリストを追加するための明示的な表現を追加することが、これを達成するのに役立つことを願っていました。GHCに上記のことを納得させる別の方法はありますか?

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

haskell - 異種の昇格型を構成的に値に反映する

私は-XDataKinds最近遊んでいて、型ファミリを使用して昇格された構造ビルドを取得し、それを値レベルに引き下げたいと考えています。これが可能なのは、構成要素が非常に単純であり、端末の表現が単純であるからだと思います。

バックグラウンド

Strings種類の型になるの単純なバラの木を降格/反映したいと思います(型レベルの文字列としてTree Symbol使用する場合)。GHC.TypeLits.Symbolここに私のボイラープレートコードがあります:

これは、次の非常に詳細な図のように見える単純な型レベルのバラの森です。

試みられた解決策

理想的には、この構造をトラバースして、 kind の*に 1 対 1 のマッピングを返したいのですが、過負荷のために (必要な) インスタンスを持ち越しながら、これを異種混合で行う方法はあまり明白ではありません。

vanila on#haskellは、型クラスを使用して 2 つの世界をバインドすることを提案しましたが、思ったよりもややこしいようです。私の最初の試みは、インスタンス ヘッドの制約を介して型レベルのパターン マッチの内容をエンコードしようとしましたが、関連付けられた型 (*マッピングの -kinded 型の結果をエンコードするため) がオーバーラップしました。明らかに、インスタンス ヘッドは GHC によって多少無視されます。

理想的には、リストとツリーのリフレクションもジェネリックにすることを望みますが、これは問題を引き起こしているようです。これは、型クラスを使用して型/種類の層を整理するようなものです。

これは私が望むものの非機能的な例です:

...

このコードには一般的に間違っている点がいくつかあります。ここに私が見るものがあります:

  • PostReflectionジェネリック型レベルのリスト リフレクション -型関数の高次リフレクションの結果を知るには、何らかの形式の先読みが必要です。
  • その場で を作成および破棄する必要がありますProxy。これが現在コンパイルされないかどうかはわかりませんが、期待どおりに型が統合されるかどうかはわかりません.

しかし、この型クラスの階層構造は異種文法を捉える唯一の方法のように感じられるので、これはまだ出発点かもしれません。これに関するどんな助けも途方もないでしょう!

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

haskell - DataKinds 派生型の Typeable インスタンスを自動的に派生させるにはどうすればよいですか?

私はこのようないくつかのタイプを持っていました:

typeOfそして、私はこの関数でそれらを使用したかった:

findRateの型aにインスタンスがなかったため、これは機能しませんでしたTypeable。だから私はこれを行うことでそれを修正しました:

ただし、通貨の数が増えると、それは多くのボイラープレートになります。すべての種類の種類がインスタンスCurrencyを派生させるように指定する方法はありますか?Typeable

編集:また、それを推論させる方法がいいので、どこにでも追加する必要はありませMoney aん。それはマイナーですが。aTypeable(Typeable a) =>