問題タブ [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.
f# - Haskell GADT と F# の型クラスに最も近いものは何ですか?
F# は OOP を使用した ML です。Haskell の一般化された代数データ型と型クラスに最も近いものは何ですか?
haskell - * 以外の種類のファントム型パラメーターを使用して GADT の Eq を導出する方法
たとえば、次のコードをコンパイルしようとすると
型エラーを与える
これが機能しない理由はわかりますが、Eq (および Ord) インスタンスを手動で記述する必要のない解決策はありますか?
haskell - GADT を使用して、さまざまなノード タイプと親子関係ルールを持つツリーを構築する
xml
simpleパッケージを使用して、カスタム XML 構造用の XML ジェネレーターを構築しようとしています。サンプルの XML フラグメントを次に示します。
このカスタム XML には、各種類の要素の下にネストできる要素を指定する規則があります。これらの規則に基づいて構造を制限する XML フラグメントを構築するために GADT を定義することは可能ですか? ルールは、許可される親子関係の種類を単純にリストしたものです (たとえば、Response は他の要素の子にすることはできず、SendAnswer は Response の子にすることができます)。
これが私が得た距離です:https://gist.github.com/4104499
実行すると、次のように出力されます。
ただし、このアプローチには多くの欠点があると思います。
- MyXMLElement のデータ定義 (31 行目) には、有効な親子関係と同じ数の行が必要になります。別の実装では、要素の有効な子のみをリストし、実行時に有効な関係をチェックすることができます。このアプローチ (GADT を使用) を選択したのは、コンパイル時に無効な XML ツリーが不正になるようにするためです。
- eval によって提供されるインターフェイスは非常に制限されています。任意のネストは許可されません (親子関係のルールに従っている場合でも)。必要に応じて XML 属性を追加することはできません。
この問題が GADT を使用したソリューションに適しているかどうかを知りたいです。もしそうなら、どうすればより良い設計ができますか?
ocaml - OCaml-GADT-ブール式
私はこれを持っている何らかの方法があるかどうか疑問に思いました:
ここでの問題は、引数のタイプに応じて、BinOpを2回定義できないことです...
PS:「正規」とは、「式に含まれるn個の変数が0から(n-1)の範囲のintで表される」ことを意味します。一部の関数で必須にする必要があるのは不変条件です。
haskell - 異種リストのタイプを制限するにはどうすればよいですか?
私は現在、Haskellに埋め込まれた構文のような(一種の)typesafexmlを作成しようとしています。結局、私はこのようなことを達成したいと思っています:
ここで、グループとアイテムは種類がありNode :: [Arg t] -> [Node c] -> Node t
ます。これが意味をなさない場合は、おそらく私が何をしているのかわからないためです:)
今の私の質問は、型システムがに「間違った」引数を与えるのを防ぐ方法ですNode
。たとえばNode
、型のsは型のGroup
引数のみを持つことができますが、sは型Arg1
との引数を持つことができます。Arg2
Item
Foo
Bar
肝心な質問は、異種リストのタイプをどのように制限するかということだと思います。
私が達成しようとしている(ユーザー)構文の例:
ここで、(。:)は、ノードにパラメーターを設定する関数です。これは、2つのアイテムを含むいくつかのパラメーターを持つグループを表します。
さらに、次のような(疑似)定義があります。
タイプチェッカーで使用エラーをキャッチする方法を探しています。
haskell - 関数の依存関係と存在量化を使用して不要なパラメーターを型から削除する方法
私が取り組んでいる HLearn ライブラリには、次のようなコンテナー データ型があります。
params
問題は、とmodel
が互いに一意に決定されるため、この型は使いにくいということです。
したがって、型を指定するときに両方を指定する必要がなければ、はるかに便利です。コンパイラは自動的にそれを行うことができるはずです。
この問題を解決するための私のアイデアは、存在量化を使用する型エイリアスを作成することでした:
しかし、これはうまくいきません。通常のようにインスタンスを作成するとContainer'
、すべて正常に動作します。
しかし、私のContainer
タイプを使用すると:
ghc が爆発する:
不正なポリモーフィックまたは修飾された型: コンテナー モデル `Model (ContainerParams params) (Container model)' のインスタンス宣言内
このエラー メッセージの意味がわかりません。Container
パラメータを指定する必要のない型を作成するために、私のソリューションを何らかの形で修正することは可能ですか?
forall
編集:ステートメントをContainer'
宣言に移動するには、たくさんのunsafeCoerce
s が必要なように思われるので、それは悪い解決策のように思われることに注意してください。
また、 を変更して機能type Container
させることもできますdata Container
が、これには一部であるすべてのインスタンスを再宣言する必要がConatiner'
あり、そうしたくありません。私はこのパターンに従うさまざまなタイプを持っているので、この問題を解決する一般的な方法があるはずです。
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 を使用しています。
なぜこれが起こるのか誰にも分かりますか?多分私はいくつかのコードを間違って使用していますか?
haskell - GADT /既存のデータコンストラクターをレイジーパターンで使用できないのはなぜですか?
今日、既存のGADTコンストラクターで照合するときにレイジーパターンを使用しようとすると、コンパイラエラーが発生しました。
実存的またはGADTデータコンストラクターは、遅延(〜)パターン内では使用できません
なぜその制限なのですか?それが許可された場合、どのような「悪い」ことが起こる可能性がありますか?
haskell - HaskellでLispyデータ型を定義するにはどうすればよいですか?
私はCourseraのAI計画クラス用にLispyPDDLパーサーをプログラミングしています。
HaskellでLispyデータ型を定義するにはどうすればよいですか?
haskell - DataKindsのトラブル
GADTとDataKindsを使用して発生している問題の非常に単純な例を作成しました。私の実際のアプリケーションは明らかにより複雑ですが、これは私の状況の本質を明確に捉えています。Test型の任意の値(T1、T2)を返すことができる関数を作成しようとしています。これを達成する方法はありますか、それとも依存型の領域に入りますか?ここでの質問は似ているように見えますが、私はそれらから私の質問に対する答えを見つけることができませんでした(または理解できませんでした)。私はこれらのGHC拡張機能を理解し始めたばかりです。ありがとう。
----ここにエラーがあります----Test.hs:14:26: