問題タブ [gadt]
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 の網羅性チェックの失敗
次のコードを検討してください。
funは徹底的に一致しますが、-Wall を指定してコンパイルすると、GHC はケースの欠落について文句を言います。ただし、別のコンストラクターを追加すると:
そうすれば、GHC は楽しみが完全であることを正しく検出します。
私は自分の仕事でこれに似たコードを使用しています.ケースを見逃した場合はGHCに警告を発させ、そうでない場合は警告を発させないようにしたいと考えています. GHC が最初のプログラムで文句を言うのはなぜですか? また、偽のコンストラクタやケースを追加せずに、最初のサンプルを警告なしでコンパイルするにはどうすればよいですか?
haskell - haskellで論理式を解くには?
私は、これらのデータ型定義をその一部として含む haskell プログラムに取り組んでいます。
とデータフォーミュラtsどこ
また、各 Term t を次のように評価する eval 関数:
そして、可能性のある値の置換に対して Formula が満足できるかどうかをチェックする次の関数:
今、私は与えられた Formula を解く解関数を書くように頼まれました:
また、テスト例として次の数式があり、ソリューションが次のように動作することを期待しています。
ソリューション関数は次を返す必要があります。
これまでのところ、この関数の私のコードは次のとおりです。
ヘルパー関数は次のとおりです。
最後に、ここに私の質問があります: このソリューション関数を使用すると、ex1 や ex2 のような数式を問題なく解くことができますが、ex3 を解くことができないという問題があります。 「フォーオール」の . これを行う方法について何か助けがあれば、よろしくお願いします。
scala - Scala GADT サポートの制限を理解する
Test.test のエラーは不当に思えます:
エラーを変更する、または解消するには、いくつかの方法があります。
特性 A (およびケース クラス B) の V パラメータを削除すると、エラーの「GADT-skolem」部分はなくなりますが、「コンストラクタをインスタンス化できません」部分は残ります。
Test クラスの U パラメータを Test.test メソッドに移動すると、エラーはなくなります。なんで ?(同様に、エラーは Test2.test2 には存在しません)
次のリンクもその問題を特定していますが、提供された説明がわかりません。http://lambdalog.seanseefried.com/tags/GADTs.html
これはコンパイラのエラーですか? (2.10.2-RC2)
それを明確にするのを手伝ってくれてありがとう。
2014/08/05: コードをさらに単純化することに成功し、コンパイル エラーを発生させずに U が即時関数の外にバインドされる別の例を提供します。2.11.2 でもこのエラーが発生します。
単純化すると、これはコンパイラのバグまたは制限のように見えます。または、何か不足していますか?
haskell - 動的な要求/応答タイプのパイプ?
これは理にかなっているように思えますが、タイプの問題があります。Client
オプションのリストを に送信できる が必要Server
です。これは、オプションを選択して、選択した要素を返します。だから、このようなもの:
アイデアは、サーバーがa -> String
リストの各要素で関数を呼び出して、それらをユーザーに表示できるということです。リストと関数が一致する限り、a を変更できるようにしたいと考えています。
このようなことは可能ですか?たぶん、私が望む制約は何らかの方法でGADTにエンコードできますか?
haskell - unsafeVacuous で失敗する適切なポリモーフィック Functor インスタンスを作成するにはどうすればよいでしょうか?
Void
Haskell Libraries メーリングリストで議論しているときに、次のような発言がありました:
昔は、タイプが何も持つべきではないと教えてくれたときに、
unsafeCoerce
全体をトラバースしてその内容を置き換えるのにお金を払いたくないというコナー・マクブライドの要請で実装されていました。Functor
これは、適切な Functor に適用された場合は正しいですが、GADT が存在する場合は覆すことができます。
のドキュメントにunsafeVacuous
も次のように記載されています。
タイプの値のみを保持する
Void
ものよりも無人である場合は、値を保持していません。Functor
Void
これは、引数に対して GADT のような分析を実行しない有効なファンクターに対してのみ安全です。
このようないたずら好きな GADTFunctor
インスタンスはどのように見えるでしょうか? (もちろんトータル機能のみを使用しundefined
、error
などは使用しません)
haskell - 関数の入力と出力を導出するために再帰的な型レベル関数を開発しようとしています
私が求めていることを理解するには、次の定義が必要です。
これらの定義を使用して、次のように機能する関数を作成したいと思います。
どこ
と
基本的な考え方は、S に使用されるコンストラクターと R を構築するときに選択されたパラメーターに基づいて、さまざまな形状の入力を受け入れ、さまざまな形状の出力を生成することです。種類の不一致エラー。この種のものをエンコードするための直感的でクリーンな方法があるかどうか疑問に思っていました.
私が持っている現在の試みは次のとおりです。
このアプローチは、R の最初の引数には種類の Param が必要ですが、Param には種類の * があり、これを修正する方法がわかりません。制約を追加して変数を使用すると、次のようになりました。
もちろん、Haskell は Kind を制約として使用することを拒否しています。私はかなり迷っており、これでどこに行くべきかわかりません。ヘルプやガイダンスは非常に貴重です。
haskell - タイプ可能にGADTをキャストする
私が DSL を書いていて、ファントム型のサポートと正しく型付けされていない式の両方をサポートしたいとしましょう。私の値のタイプは
ファントム消去バージョンで作業できます
これで、この方法でファントム タイプの両方を削除したり、再構築したりValunk
することで、 の値を操作できます。case
VNum
VBool
Typeable
しかし、これは機械を再実装しているように感じます。Typeable
残念ながら、GHC ではfor を導出できません。Val
この制限を回避する方法はありますか? ぜひ書きたい
しかし今、私はこのような機械に頼らなければなりません
私のすべてのタイプに。
haskell - (Monad m, Monoid o) => mo? の適用インスタンス
ひどいタイトルでごめんなさい。である型をラップするApplicative
ためのインスタンスを作成しようとしています。Monad
Monoid
これは機能しません。GCHi は次のように訴えます。
上に書いたことは意味をなさないかもしれないことを理解しています。コンテキストは次のとおりです。論文A pattern for most compositional functions でcompos
説明されているように、抽象化を使用しようとしています。このツリーを取得します ( の GADT バージョンを使用して、大幅に簡略化しました):compos
ツリーをたどり、エラーのリストまたは文字列のセットを返す関数をたくさん書きますが、下に行くときに状態 (バインド環境など) も必要とします。たとえば、次のようになります。
composFoldM
構造を利用するcompos
ことで、これらはすべて抽象化できるはずだと思います(Monad m, Monoid o) => m o
。そのため、論文の 575/576 ページにある の GADTApplicative
バージョンで使用します。この構造のインスタンスを作成する必要があると思います。どうすればいいですか?それとも、完全に間違った道を進んでいますか?compos
Applicative
haskell - Haskell: 同じペアの特殊化を持つペアの重複インスタンス
(コメントを使用すると、コピーと貼り付けが簡単になります)
「正しいこと」を行うこの種のクラスを書くことは可能ですか? つまり、正しいインスタンスが選択されるようにプログラムを変更するにはどうすればよいでしょうか。
ランタイム ソリューションを 1 つ知っていると思いますが、それはあまり良くありません。
書き換えルールを見てきましたが、それは良い解決策ですか?
haskell - GADT で複数の関数の実装を避けるにはどうすればよいですか?
まず、私のコードの最小限の例を次に示します。
異なる種類の URL が混在しないように、GADT を使用しています。このmyExportURL
機能は、すべての種類の URL で同じです。このようなものを使用する方法はありますか:
GADT のすべてのサブタイプ (正しい用語は?) ごとに繰り返す代わりに?
コードまたは私が解決しようとしている問題に関するその他のコメントも大歓迎です。