問題タブ [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.
haskell - (DataKinds を介して) * -> A に持ち上げるコンストラクター
次のようなADTが与えられた場合
拡張により、DataKinds
それを種類と型/型コンストラクターに持ち上げることができます
K
型コンストラクターにリフトするコンストラクターを追加する方法はありますか
?
haskell - Nat 種類に対するカスタム型ファミリの定義
kind の型に対する新しい計算をどのように定義しますGHC.TypeLits.Nat
か? 型ファミリーを定義できることを望んでいます
そのようWIDTH 0 ~ 0
なWIDTH (n+1) ~ log2 n
haskell - DataKinds を使用せずに値を他の値に依存させるにはどうすればよいですか?
ユニバース タイプとワーカー タイプがあります。労働者は宇宙を変えることができます。私が達成したいのは、そのユニバースのワーカーのみがユニバースを変更できるようにすることです (将来または過去のワーカーではありません)。
私が達成できる最高のものはこれです:
に変更w2 = head $ _allWorkers u2
するw2 = head $ _allWorkers u
と、必要なコンパイルエラーが発生します。
私があまり気に入らないのは、各ユニバースにバージョンがアタッチされており、手動でインクリメントする必要があることです。明示的なバージョン管理を必要としない別の方法でこれを行うことはできますか? 型チェッカーが知っているdoSomething
関数が a を返すようにするようなものは、とは異なります。Universe otherType
otherType
t
御時間ありがとうございます。
haskell - DataKinds と型クラスのインスタンス
次の例は、私の実際の問題を煮詰めたものです。DataKinds の制約付き存在型から情報を取得する とどこか似ているようですが、求めていた答えを得ることができませんでした。
K
タイプとを持つ有限の昇格された DataKindA
と、種類 * のタイプを持つ項を生成するB
ための poly-kindedProxy
データ型があるとします。
ここで、 が kind のShow
すべてのタイプの -instancesを書きたいと思います。これは正確に 2 つです。Proxy a
a
K
しかし、Show
-instance を使用するには、種類が次のように制限されている場合でも、明示的にコンテキストを提供する必要がありますK
。
私の目標は、型クラスの制約を取り除くことです。これは重要ではないように思えるかもしれませんが、私の実際のアプリケーションでは、これは大きな意味を持ちます。
次のように、単一のより一般的なインスタンスを定義することもできますShow
。
A
これにより、実際には制約を削除できますが、新しい問題は と の 2 つのタイプを区別することB
です。
それで、私のケーキを食べて、それも食べる方法はありますか? つまり、型で型クラス制約を提供する必要はなくtest
(kind アノテーションは問題ありません)、2 つの異なるshow
実装を保持している (たとえば、何らかの方法で型を区別することによって) ということですか?
実際には、型情報だけを持っているコンテキストで、それぞれの型 ( A
、B
) を特定の値 (ここでは"A"
、 ) に単純に関連付けることができれば、型クラス全体を削除しても問題ありません。"B"
しかし、これを行う方法がわかりません。
提供された洞察に非常に感謝します。
haskell - :k [False] が GHCI でエラーになるのはなぜですか?
以下のセッションの最後に受け取ったエラーについて混乱しています。
エラーの理由
今後の実験により、次のことが明らかになります。
[Int]
値が存在する可能性があるため、親切ですが、親切*
であることにも意味があり[*]
ます。
もう少しデータポイント:
haskell - GADT を含むベクター
ExistentialQuantification、GADT、KindSignature などについて、できる限りのことを学んでいます。そのために、すべてをよりよく理解するのに役立つ小さなプログラムを考え出そうとしています。
今、私はこの小さなスニペットを持っています (これは実際にコンパイルされるので、自分で試すことができます。ベクターとmtlパッケージが必要です)。それを機能させるために
ご覧のとおり、MenuItemReferences の Vector を取得しようとしています...現在持っているものでエラーが発生するため、何が間違っているのですか:
エラーの背後にある理由と、私が達成しようとしていることに(可能な場合)どのようにアプローチできるかを誰かが説明できますか.