問題タブ [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 - 型リテラルを「抽出」する簡単な方法はありますか?
これは機能します:
ネストされた関数なしで unF を書くことはできますか? 私は一般的にこれを「正しく」行っていますか?
haskell - 折りたたみ再帰型ファミリー
種類 [*] のファントム型でデータを折り畳もうとしています。ここに私のコードの簡略版があります
フォールドオペレーターが欲しい
しかし、それはうまくいきません。a
とは異なりHAppendList a '[]
ますが、そうではありません。
コンパイルHAppendList a '[]
で とを統合できないのはなぜa
ですか?
(ただし、ghciで手動で折り畳むことはできません:t a !++! b !++! b !++! b => T '[Int]
haskell - 型に DataKinds を設定できない理由はありますか?
DataKinds では、次のような定義
KFoo :: BOX
種類と種類を紹介しTFoo :: KFoo
ます。なぜ私は定義に進むことができないのですか
そのようなCFoo :: TFoo
、、?TFoo :: KFoo
KFoo :: BOX
すべてのコンストラクターは、 kind に属する型に属する必要があり*
ますか? もしそうなら、なぜですか?
編集: コンストラクターと型は名前空間を共有するため、これを行ってもエラーは発生しませんが、昇格したコンストラクターではなく通常の型として名前を明確にするため、GHC は競合を許可します。ドキュメント'
には、昇格したコンストラクターを参照するために a をプレフィックスとして付けるように記載されています。その2行目を次のように変更すると
エラーが発生します
不正な型またはクラス宣言の先頭: TFoo
haskell - Haskell 型ファミリーのアプリケーションは評価されません
型ファミリでデータ型を使用すると、興味深い状況が見つかりました。
コンパイラのエラー メッセージはNo instance for (C (ID ())) arising from a use of W
. これは、型ファミリ アプリケーションが飽和状態であっても、完全に評価されていないことを示唆しています。:kind! ID ()
と評価されるため、インスタンス()
に応じて使用する必要があります。C ()
どうにかして の評価を強制できID ()
ますか? コンパイラのバグですか?
私はGHC 7.8.3を使用しています
haskell - ユーザー定義の種類でインデックス付けされたデータ型に一致するパターンに含まれるキャストを理解する
それで、私は Haskell で遊んでいてDataKinds
、TypeFamilies
生成されたコア GHC を見始めました。
これが私の質問の動機となる小さなテストケースです。
eval
関数用に生成されたコアを見てみましょう。
a
明らかに、特定のブランチに何があり得るかについての情報を持ち歩く必要があります。Datakind のインデックスを作成せず、TypeFamilies を使用しない場合、キャストははるかに理解しやすくなります。
次のようになります。
これは完全に理解できますが、TypeFamilies
この例で問題になるのは次の部分です。
2行目は本当に私を混乱させるものです。そこでセミコロンは何をしているのですか?ここでは少し場違いに思えますか、それとも何か不足していますか? これについて読むことができる場所はありますか(お勧めできる書類があれば喜んで受け取ります)
敬具、
雷鳥
haskell - Template Haskell splice 内の型ファミリ インスタンスを正規化する
パッケージを使用してgenifunctors
、定義に型ファミリが含まれる型のファンクター インスタンスを生成しています。
最初のモジュールは、データ型自体を定義します。
これは期待どおりに機能します。
Functor
インスタンスは別のモジュールで定義されます。
そして、このエラーが発生します:
これは、 がまたは宣言からの型コンストラクターのみを処理できるためgenifunctors
です。geniplate
newtype
data
これは、再帰的に検査する前に型を正規化することで修正できます。
では、Template Haskell splice 内でこれを行う方法はありますか? (つまり、Q
モナド内?)