問題タブ [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.

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

f# - Haskell GADT と F# の型クラスに最も近いものは何ですか?

F# は OOP を使用した ML です。Haskell の一般化された代数データ型と型クラスに最も近いものは何ですか?

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

haskell - * 以外の種類のファントム型パラメーターを使用して GADT の Eq を導出する方法

たとえば、次のコードをコンパイルしようとすると

型エラーを与える

これが機能しない理由はわかりますが、Eq (および Ord) インスタンスを手動で記述する必要のない解決策はありますか?

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

haskell - GADT を使用して、さまざまなノード タイプと親子関係ルールを持つツリーを構築する

xmlsimpleパッケージを使用して、カスタム XML 構造用の XML ジェネレーターを構築しようとしています。サンプルの XML フラグメントを次に示します。

このカスタム XML には、各種類の要素の下にネストできる要素を指定する規則があります。これらの規則に基づいて構造を制限する XML フラグメントを構築するために GADT を定義することは可能ですか? ルールは、許可される親子関係の種類を単純にリストしたものです (たとえば、Response は他の要素の子にすることはできず、SendAnswer は Response の子にすることができます)。

これが私が得た距離です:https://gist.github.com/4104499

実行すると、次のように出力されます。

ただし、このアプローチには多くの欠点があると思います。

  1. MyXMLElement のデータ定義 (31 行目) には、有効な親子関係と同じ数の行が必要になります。別の実装では、要素の有効な子のみをリストし、実行時に有効な関係をチェックすることができます。このアプローチ (GADT を使用) を選択したのは、コンパイル時に無効な XML ツリーが不正になるようにするためです。
  2. eval によって提供されるインターフェイスは非常に制限されています。任意のネストは許可されません (親子関係のルールに従っている場合でも)。必要に応じて XML 属性を追加することはできません。

この問題が GADT を使用したソリューションに適しているかどうかを知りたいです。もしそうなら、どうすればより良い設計ができますか?

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

ocaml - OCaml-GADT-ブール式

私はこれを持っている何らかの方法があるかどうか疑問に思いました:

ここでの問題は、引数のタイプに応じて、BinOpを2回定義できないことです...

PS:「正規」とは、「式に含まれるn個の変数が0から(n-1)の範囲のintで表される」ことを意味します。一部の関数で必須にする必要があるのは不変条件です。

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

haskell - 異種リストのタイプを制限するにはどうすればよいですか?

私は現在、Haskellに埋め込まれた構文のような(一種の)typesafexmlを作成しようとしています。結局、私はこのようなことを達成したいと思っています:

ここで、グループとアイテムは種類がありNode :: [Arg t] -> [Node c] -> Node tます。これが意味をなさない場合は、おそらく私が何をしているのかわからないためです:)

今の私の質問は、型システムがに「間違った」引数を与えるのを防ぐ方法ですNode。たとえばNode、型のsは型のGroup引数のみを持つことができますが、sは型Arg1との引数を持つことができます。Arg2ItemFooBar

肝心な質問は、異種リストのタイプをどのように制限するかということだと思います。


私が達成しようとしている(ユーザー)構文の例:

ここで、(。:)は、ノードにパラメーターを設定する関数です。これは、2つのアイテムを含むいくつかのパラメーターを持つグループを表します。

さらに、次のような(疑似)定義があります。

タイプチェッカーで使用エラーをキャッチする方法を探しています。

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

haskell - 関数の依存関係と存在量化を使用して不要なパラメーターを型から削除する方法

私が取り組んでいる HLearn ライブラリには、次のようなコンテナー データ型があります。

params問題は、とmodelが互いに一意に決定されるため、この型は使いにくいということです。

したがって、型を指定するときに両方を指定する必要がなければ、はるかに便利です。コンパイラは自動的にそれを行うことができるはずです。

この問題を解決するための私のアイデアは、存在量化を使用する型エイリアスを作成することでした:

しかし、これはうまくいきません。通常のようにインスタンスを作成するとContainer'、すべて正常に動作します。

しかし、私のContainerタイプを使用すると:

ghc が爆発する:

不正なポリモーフィックまたは修飾された型: コンテナー モデル `Model (ContainerParams params) (Container model)' のインスタンス宣言内

このエラー メッセージの意味がわかりません。Containerパラメータを指定する必要のない型を作成するために、私のソリューションを何らかの形で修正することは可能ですか?


forall編集:ステートメントをContainer'宣言に移動するには、たくさんのunsafeCoerces が必要なように思われるので、それは悪い解決策のように思われることに注意してください。

また、 を変更して機能type Containerさせることもできますdata Containerが、これには一部であるすべてのインスタンスを再宣言する必要がConatiner'あり、そうしたくありません。私はこのパターンに従うさまざまなタイプを持っているので、この問題を解決する一般的な方法があるはずです。

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

compilation - このGADTテンプレートのHaskellモジュールでGHCが終了しないのはなぜですか?

テンプレート Haskell を使用した GADT の生成に問題があります。問題は、コードを完全にコンパイルできないことです。ファイルのロード時に GHCI が終了せず、ghc プロセスが大量のメモリと CPU を使用します (2.4GB、50~70%)。

私はそれがまだ起こる最小限の例を作ろうとしました。[| |]オックスフォード表記 ( ) を使用するか、TH データ型を手動で適用して関数を作成するかは問題ではありません。次の単純なモジュールを検討してください。

Haskell Platform for x64 の OSX Mountain Lion で GHC 7.4.2 を使用しています。

なぜこれが起こるのか誰にも分かりますか?多分私はいくつかのコードを間違って使用していますか?

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

haskell - GADT /既存のデータコンストラクターをレイジーパターンで使用できないのはなぜですか?

今日、既存のGADTコンストラクターで照合するときにレイジーパターンを使用しようとすると、コンパイラエラーが発生しました。

実存的またはGADTデータコンストラクターは、遅延(〜)パターン内では使用できません

なぜその制限なのですか?それが許可された場合、どのような「悪い」ことが起こる可能性がありますか?

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

haskell - HaskellでLispyデータ型を定義するにはどうすればよいですか?

私はCourseraのAI計画クラス用にLispyPDDLパーサーをプログラミングしています。

HaskellでLispyデータ型を定義するにはどうすればよいですか?

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

haskell - DataKindsのトラブル

GADTとDataKindsを使用して発生している問題の非常に単純な例を作成しました。私の実際のアプリケーションは明らかにより複雑ですが、これは私の状況の本質を明確に捉えています。Test型の任意の値(T1、T2)を返すことができる関数を作成しようとしています。これを達成する方法はありますか、それとも依存型の領域に入りますか?ここでの質問は似ているように見えますが、私はそれらから私の質問に対する答えを見つけることができませんでした(または理解できませんでした)。私はこれらのGHC拡張機能を理解し始めたばかりです。ありがとう。

同様の質問1

同様の質問2

----ここにエラーがあります----Test.hs:14:26: