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

haskell - 異種リスト内のシングルトン

異種リストを分析する関数を書きたいと思います。議論のために、次のようにしましょう

最終的な目標は、次のようなものを書くことです

analyzeRecの各タイプと値でインスタンス化された制約の知識を使用する顕著なビットRecです。このクラスベースのメカニズムは機能しますが、これを何度も行わなければならない場合 (私もそうしています) は、扱いにくく冗長です。

singletonsしたがって、代わりにこれを に基づくメカニズムに置き換えたいと思います。代わりに次のような関数を書きたい

しかし、これは明らかに少なくともいくつかの次元で横ばいです。

シングルトン手法を使用して、異種リストに対してそのような関数を記述する「正しい」方法は何ですか? この問題にアプローチするより良い方法はありますか? この種のことを解決するには、何を期待すればよいですか?

(参考までに、これは Serv と呼ばれる実験的な Servant クローン用です。関連するファイルは背景としてServ.Internal.Header.Serializationあります。タグ付けされたヘッダー値の異種リストを取り込み、それらを実際のペアのリストに入れるServ.Internal.Header関数を書きたいと思います。 )headerEncode(ByteString, ByteString)

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

haskell - HaskellでユニットをエンコードするためにData Kinds + Phantomタイプを使用するには?

以下のコードはコンパイルされるため機能しません。そうすべきではありません(直感的に)。

1) このコードがコンパイルされるのはなぜですか?

isKm $ getMeter 12)コンパイル時に「悪い」プログラムが拒否されるように、このプログラムを「修正」するにはどうすればよいですか?

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

haskell - DataKinds 拡張機能を使用するときに型コンストラクターをエクスポートする方法は?

高度な型システムで遊んでいます。名前付きの種類と、その種類の型を生成するいくつかの型コンストラクターが必要です。

ここで、私が理解しているように、種類Subjectと型のコンストラクター NewExisting名前を付けまし:: Subjectた。これらの型コンストラクターは引数を取りません (私はそれらをファントム型として使用する予定です)。

今私が書くことができる違いがあります:

これもコンパイルされます。紛らわしいのは、データ型の宣言がデータ型の宣言と区別できないことです。そのため、このコードはSubject名前付きの種類だけでなくデータ型も生成するように見えSubjectます (?)。種類、次にNewおよびExistingは型コンストラクター、または型、およびNew およびは型Existingのものの値コンストラクターですSubject)。「機能すると思われるすべてのものを宣伝する」というこの設計上の決定は得られません。

さて、私の問題は、他のモジュールで使用する型コンストラクターとしてエクスポートできないことNewですExisting。たとえば、次のようなものを宣言します。

同時にどこで

種類が悪く、コンパイルされるべきではありません。

これが私がそれらをエクスポートしようとしている方法です:

私が得るもの:

スコープ型コンストラクターまたはクラス 'New' にありません</p>

スコープ型コンストラクターまたはクラス「既存」にありません</p>

セクション7.9.3のGHCマニュアルで は、「型とコンストラクタ」を区別するために一重引用符を使用できると書かれている'ので、試してみました:

…しかし、今は解析エラーです。


Newコンストラクターをエクスポートして型を作成するにはどうすればよいExistingですか? 最も重要なのは、現在の理解に何か問題がありますか?

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

haskell - 値が 1 つだけの種類レベルに昇格可能なデータ型

Bool私は、次のように親切なレベルに昇格できることを理解していBoolます。TrueFalse

代わりに宣伝したかっ()たのですが、もちろんこれには 1 つの値しかありません()。しかし、これはうまくいかないようです:

Boolandをそのまま使用できると思いますTrueが、種類レベルに昇格できる 1 つの値の型はありますか?

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

haskell - Haskell で「種類のクラス」を作成する方法、または型ファミリを使用して型レベルでアドホック ポリモーフィズムを作成する方法

Haskell の型ファミリの機能と、型レベルの計算について研究しています。以下を使用して、型レベルでパラメトリック多態性を取得するのは非常に簡単なようですPolyKinds

:kind! Bool == Bool:kind! Int == Int:kind! Z == Zのようなことができます:kind! (I Z (S Z)) == (I (S Z) (S (S Z)))

type +ただし、アドホックなポリモーフィックを作成したいと考えています。私が与えたインスタンスに制約されるように。ここでの 2 つのインスタンスは、 kind のNatK型とkind の型になりますIntK

私は最初にそれをパラメトリックにポリモーフィックにしようとしました:

私ができるように、これは機能します:kind! (I (S Z) Z) :+ (I (S Z) Z)

しかし、私もできます:kind! Bool :+ Bool。これは意味がありませんが、単純な型コンストラクターとして使用できます。そのような誤った型を許可しない型ファミリを作成したいと考えています。

この時点で、私は迷っています。typeパラメータ付きの型クラスを試しました。しかし、それはうまくいきませんでした。

それはまだ許します:kind! Add Bool Bool

これは、または何らかの「種類のクラス」ConstraintKindsに制約する必要がある拡張機能と関係がありますか?:+Add

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

haskell - Maybe 型の show メソッドのオーバーロード

これは、私が尋ねた以前の質問のフォローアップです。今、オーバーロードされた関数toTextでも処理できるようにメソッドを変更しようとしています。以下は、コンパイルして正常に動作するコードです。ここで、他の型の定義自体を使用するためにオーバーロードしたいと思います。Maybe atoTexttoTextMaybe atoText

以下のコメントに示されているように、型のtoTextC定義を更新すると:TTMMaybe

私はこのエラーを受け取ります - このオーバーロードを解決する方法についてのポインタをいただければ幸いです:

更新 1:

コメントの提案に従って、追加の制約を使用して修正しました。ただし、UndecidableInstances拡張機能をオンにする必要がありました。を使用せずにこれを行うより良い方法はありUndecidableInstancesますか? おそらく、型レベルの計算を表現するためのある種の型演算子または関数でしょうか?

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

haskell - パターン シノニムは型レベル リスト内の型を統合できません

タイプレベルのリストを持つ GADT に基づいてパターン シノニムを定義しようとすると、エラーが発生します。

私はそれをこの例に要約することができました:

私に与えます:

これはバグですか、それとも何か間違っていますか?