問題タブ [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 - 複雑な GADT の促進
私は-XDataKinds
最近いじっていましたが、なぜFoo
以下が自動的に昇格されないのか疑問に思っていました:
つまり、Baz
は の異種リストでありFoo a
、a
は によって制約されBar
ます。
このデータ型のプロモート バージョンを手動で作成する方法はありますか? どうすればそうすることができますか?種類を宣言できますか? のダミーの Haskell98 バージョンを作成して、Foo
それをモジュールか何かに分離できますか? 理想的には、制約コンテキストを保持したいのですが、Constraint
並べ替えはないと思います。どんなアイデアでもとても役に立ちます!
haskell - 異常な種類とデータ コンストラクター
なぜこれに気付かなかったのかはわかりませんが、データ コンストラクターと関数定義は同様に、の種類の署名により、 の種類の下でも、*
バリアント* -> *
などの種類以外の型を使用できません。(->)
-XPolyKinds
これが私が試したコードです:
私が得ているエラーは次のとおりです。
非伝統的な種類とのパターン マッチングを許可してはならないのはなぜですか?
haskell - HList と DataKinds、kind 昇格不可
大量の GHC 拡張機能を使用するこのコード スニペットがあります。
GHC は次のように訴えています。
HList
種類を昇格できないのはなぜですか? GHC7.8.2
とを使用しても同じエラーが発生します7.11
。
もちろん、ビルトインを使用しても'[]
問題なく動作します。
実際には追加がサポートされており、次のようになっているため、HList
代わりに自分のものを使用したいと思います。'[]
HList
EDIT:主な目標は、GHCに推論させることです
書けるように
型レベルのリストを追加するための明示的な表現を追加することが、これを達成するのに役立つことを願っていました。GHCに上記のことを納得させる別の方法はありますか?
haskell - 異種の昇格型を構成的に値に反映する
私は-XDataKinds
最近遊んでいて、型ファミリを使用して昇格された構造ビルドを取得し、それを値レベルに引き下げたいと考えています。これが可能なのは、構成要素が非常に単純であり、端末の表現が単純であるからだと思います。
バックグラウンド
Strings
種類の型になるの単純なバラの木を降格/反映したいと思います(型レベルの文字列としてTree Symbol
使用する場合)。GHC.TypeLits.Symbol
ここに私のボイラープレートコードがあります:
これは、次の非常に詳細な図のように見える単純な型レベルのバラの森です。
試みられた解決策
理想的には、この構造をトラバースして、 kind の値*
に 1 対 1 のマッピングを返したいのですが、過負荷のために (必要な) インスタンスを持ち越しながら、これを異種混合で行う方法はあまり明白ではありません。
vanila on#haskell
は、型クラスを使用して 2 つの世界をバインドすることを提案しましたが、思ったよりもややこしいようです。私の最初の試みは、インスタンス ヘッドの制約を介して型レベルのパターン マッチの内容をエンコードしようとしましたが、関連付けられた型 (*
マッピングの -kinded 型の結果をエンコードするため) がオーバーラップしました。明らかに、インスタンス ヘッドは GHC によって多少無視されます。
理想的には、リストとツリーのリフレクションもジェネリックにすることを望みますが、これは問題を引き起こしているようです。これは、型クラスを使用して型/種類の層を整理するようなものです。
これは私が望むものの非機能的な例です:
...
このコードには一般的に間違っている点がいくつかあります。ここに私が見るものがあります:
PostReflection
ジェネリック型レベルのリスト リフレクション -型関数の高次リフレクションの結果を知るには、何らかの形式の先読みが必要です。- その場で を作成および破棄する必要があります
Proxy
。これが現在コンパイルされないかどうかはわかりませんが、期待どおりに型が統合されるかどうかはわかりません.
しかし、この型クラスの階層構造は異種文法を捉える唯一の方法のように感じられるので、これはまだ出発点かもしれません。これに関するどんな助けも途方もないでしょう!
haskell - DataKinds 派生型の Typeable インスタンスを自動的に派生させるにはどうすればよいですか?
私はこのようないくつかのタイプを持っていました:
typeOf
そして、私はこの関数でそれらを使用したかった:
findRateの型a
にインスタンスがなかったため、これは機能しませんでしたTypeable
。だから私はこれを行うことでそれを修正しました:
ただし、通貨の数が増えると、それは多くのボイラープレートになります。すべての種類の種類がインスタンスCurrency
を派生させるように指定する方法はありますか?Typeable
編集:また、それを推論させる方法がいいので、どこにでも追加する必要はありませMoney a
ん。それはマイナーですが。a
Typeable
(Typeable a) =>