問題タブ [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 に答える
84 参照

haskell - 型リテラルを「抽出」する簡単な方法はありますか?

これは機能します:

ネストされた関数なしで unF を書くことはできますか? 私は一般的にこれを「正しく」行っていますか?

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

haskell - 折りたたみ再帰型ファミリー

種類 [*] のファントム型でデータを折り畳もうとしています。ここに私のコードの簡略版があります

フォールドオペレーターが欲しい

しかし、それはうまくいきません。aとは異なりHAppendList a '[]ますが、そうではありません。

コンパイルHAppendList a '[]で とを統合できないのはなぜaですか?

(ただし、ghciで手動で折り畳むことはできません:t a !++! b !++! b !++! b => T '[Int]

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

haskell - 型に DataKinds を設定できない理由はありますか?

DataKinds では、次のような定義

KFoo :: BOX種類と種類を紹介しTFoo :: KFooます。なぜ私は定義に進むことができないのですか

そのようなCFoo :: TFoo、、?TFoo :: KFooKFoo :: BOX

すべてのコンストラクターは、 kind に属する型に属する必要があり*ますか? もしそうなら、なぜですか?

編集: コンストラクターと型は名前空間を共有するため、これを行ってもエラーは発生しませんが、昇格したコンストラクターではなく通常の型として名前を明確にするため、GHC は競合を許可します。ドキュメント'には、昇格したコンストラクターを参照するために a をプレフィックスとして付けるように記載されています。その2行目を次のように変更すると

エラーが発生します

不正な型またはクラス宣言の先頭: TFoo

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

haskell - Haskell 型ファミリーのアプリケーションは評価されません

型ファミリでデータ型を使用すると、興味深い状況が見つかりました。

コンパイラのエラー メッセージはNo instance for (C (ID ())) arising from a use of W. これは、型ファミリ アプリケーションが飽和状態であっても、完全に評価されていないことを示唆しています。:kind! ID ()と評価されるため、インスタンス()に応じて使用する必要があります。C ()

どうにかして の評価を強制できID ()ますか? コンパイラのバグですか?

私はGHC 7.8.3を使用しています

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

haskell - Constraint tuple の型付け可能なインスタンス

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

haskell - ユーザー定義の種類でインデックス付けされたデータ型に一致するパターンに含まれるキャストを理解する

それで、私は Haskell で遊んでいてDataKindsTypeFamilies生成されたコア GHC を見始めました。

これが私の質問の動機となる小さなテストケースです。

eval関数用に生成されたコアを見てみましょう。

a明らかに、特定のブランチに何があり得るかについての情報を持ち歩く必要があります。Datakind のインデックスを作成せず、TypeFamilies を使用しない場合、キャストははるかに理解しやすくなります。

次のようになります。

これは完全に理解できますが、TypeFamiliesこの例で問題になるのは次の部分です。

2行目は本当に私を混乱させるものです。そこでセミコロンは何をしているのですか?ここでは少し場違いに思えますか、それとも何か不足していますか? これについて読むことができる場所はありますか(お勧めできる書類があれば喜んで受け取ります)

敬具、

雷鳥

0 投票する
0 に答える
218 参照

haskell - Template Haskell splice 内の型ファミリ インスタンスを正規化する

パッケージを使用してgenifunctors、定義に型ファミリが含まれる型のファンクター インスタンスを生成しています。

最初のモジュールは、データ型自体を定義します。

これは期待どおりに機能します。

Functorインスタンスは別のモジュールで定義されます。

そして、このエラーが発生します:

これは、 がまたは宣言からの型コンストラクターのみを処理できるためgenifunctorsです。geniplatenewtypedata

これは、再帰的に検査する前に型を正規化することで修正できます。

では、Template Haskell splice 内でこれを行う方法はありますか? (つまり、Qモナド内?)