問題タブ [hlist]
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.
scala - このHListに正しくタイプ注釈を付ける方法は?
上記のコードをコンパイルしようとすると、次のコンパイラエラーが発生します。
私はここで何が間違っているのですか?上記を入力して注釈を付ける正しい方法は何でしょうHList
か?
PS:型アノテーションを削除すると、コードは正常にコンパイルされます。
haskell - 基本的なHaskellの単相性/多型性の質問(HList)
私はHaskellとStackoverflowの初心者です。これが私の最初の、そしておそらく非常に基本的なHaskellの質問です。
これは、r1とr2がrでポリモーフィックである場合でも、rPairが型シグネチャに従ってr型を整列させることは理にかなっています。この「アライメント」の専門用語はありますか?
rConsは、渡されたRがrで単相であり、必要に応じてリストのrタイプを制約する場合にうまく機能します。しかし、それらがrで多形である場合、rPairのように整列せず、エラーが発生します(上記のrcを定義します)。
なぜそうなるのかについては漠然とした直感がありますが、私の質問は2つの部分に分かれています。誰かがその現象を明確に説明できますか?次のようにrConsを作成するにはどうすればよいですか?
ありがとう、_c
scala - Map は Scala HList で実行できますか
現在、HList のいくつかの実装を行っています。1 つは Daniel Spiewak の High Wizardry in the Land of Scala の話に基づいており、もう 1 つは Apocalisp ブログの投稿に基づいています。目標は、一次型ではなく、より高次の種類の異種リストを作成することでした。例えば:
リスト全体でマップを実行してリクエストを実行し、より高い種類の異種リストを作成することができます。そう:
等しいはずです
悲しいことに、私の試みはすべて Any の HList という結果になりました。最近の試みのコードは次のとおりです。
もう 1 つの試みは、fold を使用して新しい HList を作成する Apocalisp バージョンに基づいていましたが、これも Any 型の HList になりました。ヒントをいただければ幸いです。
scala - ScalaでfoldLeftを使用してカリー化された関数に引数リストを適用する
foldLeft
フォールドに提供される初期値が完全にカリー化された関数であり、演算子がapply
であり、リストが関数に渡される引数のリストである場合、引数のリストに対して a を実行することは可能ですf
か?
たとえば、f が次のように定義されているとします。
もちろん、直接使用できます。
または、一度に 1 つずつ引数をカリー化して適用します。
一見、これは の仕事のように見えfoldLeft
ます。
この一連のapply
使用方法を説明する最初の試みはfoldLeft
次のようになります。
ただし、次のエラーが発生します。
エラーメッセージを読んだところ、型推論にはg
.
私が探しているソリューションでは、次のタイプを除いて、元の式のすべてが変更されていませんg
。
私が最初に考えたのは、ユニオン型がここで役立つだろうということでした。Miles Sabin が Curry-Howard を使用して共用体型を導出するのを見たことがあります。そのため、最初の予感が正しければ、問題を解決するために必要な基本的な機構を持っているように見えます。
ただし、ユニオン型が答えであっても、「関数の完全にカリー化された型からカリー化された関数の型までのすべての型の結合で、最後の引数がすべて提供されている」を参照できれば便利です。つまり、型を変える方法は次のとおりです。
ユニオンタイプに:
上記のタイプとして役立ちg
ます。
a foldLeft
on a を実行すると、すべてが同じList
である場合にのみ議論が制限T1
されます。Tn-1
みたいな表記
に提供したいタイプを説明しますg
。
私が尋ねている特定のケースでは、任意の長いチェーンは必要ないため、次を使用してイテレータに境界を提供できます
ただし、等しくない型のチェーンに対してこれを実行したい場合は、チェーンをすべての接尾辞のセットに切り刻む型の魔法の関数の方が便利かもしれません。
これを実装することは、現時点で私の Scala の能力をはるかに超えています。そうする方法についてのヒントをいただければ幸いです。これが、Scala の既存の型システムを高度に使用するか、コンパイラ プラグインを介して実行できるか、またはそのどちらでもないかはわかりません。
以下のコメントで指摘されているように、結果を「共用体型」と呼ぶことは、このユース ケースには完全に適合しません。他に何と呼べばいいのかわかりませんが、それが現時点で最も近いアイデアです。他の言語はこの考えを特別にサポートしていますか? これは Coq と Agda でどのように機能しますか?
この問題に名前を付けて、全体像 (型理論、決定可能性など) に関してどこに位置するかを理解することは、 の実用的な実装を持つことよりも重要ですがANSWER
、どちらも良いことです。Scalaz、Monoids、または圏論全般への接続を描くことができる人にはボーナス ポイントがあります。
haskell - HList のメンバーの自動 HEq インスタンス
HListベースの型指定された異種リストを試しています。
以下を定義しました。
値が 1 であることを期待bIndex
していましたが、代わりに次のエラーが表示されます。
GHC (7.4.1) はインスタンスを自動的に推論できないようです
それを実現する方法はありますか?
perl - Perl HList:個々のアイテムの背景を変更
一部のデータが変更されており、保存する必要があることをユーザーに警告しようとしています。データはPerlのTk::HListボックスに表示されます。私は私ができることを望んでいました:
あるいは:
しかし、両方が投げます
ItemStyleを使用するというアイデアを見てきましたが、それが機能するかどうか、またはそれが最良の(そして唯一の)解決策であるかどうかは明確な答えがありません。ユーザーに警告するために特定の行を強調表示する別の方法はありますか?
scala - HListsは、タプルを書くための複雑な方法にすぎませんか?
私は、違いがどこにあるのかを調べ、より一般的には、HListを使用できない(つまり、通常のリストよりもメリットがない)標準的なユースケースを特定することに本当に興味があります。
(Scalaには22個(私は信じています)があることを知っていますがTupleN
、必要なHListは1つだけですが、それは私が興味を持っている概念上の違いではありません。)
以下のテキストでいくつかの質問にマークを付けました。実際には答える必要はないかもしれませんが、私には不明確なことを指摘し、特定の方向に議論を導くことを目的としています。
動機
私は最近、この質問への削除された回答を含む、人々がHListsの使用を提案したSOに関するいくつかの回答(たとえば、Shapelessによって提供されたもの)を見ました。それはこの議論を引き起こし、それが今度はこの質問を引き起こしました。
イントロ
hlistは、要素の数とその正確なタイプを静的に知っている場合にのみ役立つように思われます。数は実際には重要ではありませんが、変化するが静的に正確に知られているタイプの要素を含むリストを生成する必要はないようですが、それらの数は静的にはわかりません。質問1:たとえば、ループでそのような例を書くことさえできますか?私の直感では、静的に未知の数の任意の要素(特定のクラス階層に対して任意)を持つ静的に正確なhlistを持つことは、互換性がありません。
Hリストとタプル
これが当てはまる場合、つまり、数値とタイプを静的に知っている場合-質問2: nタプルを使用しないのはなぜですか?確かに、HListをタイプセーフにマッピングして折りたたむことができます(タイプセーフではありませんが、の助けを借りてタプルをオーバーすることもできますproductIterator
)が、要素の数とタイプは静的にわかっているため、おそらくタプル要素にアクセスするだけで済みます直接操作を実行します。
一方、f
hlistにマップする関数が非常に一般的で、すべての要素を受け入れる場合-質問3:を介してそれを使用しないのはなぜproductIterator.map
ですか?わかりました。メソッドのオーバーロードから1つの興味深い違いが生じる可能性があります。オーバーロードされたものが複数ある場合f
、(productIteratorとは対照的に)hlistによって提供されるより強力な型情報を使用すると、コンパイラーはより具体的なを選択できますf
。ただし、メソッドと関数は同じではないため、Scalaで実際に機能するかどうかはわかりません。
Hリストとユーザー入力
同じ仮定に基づいて、つまり、要素の数とタイプを静的に知る必要があるということです-質問4:要素がユーザーの操作に依存している状況でhlistを使用できますか?たとえば、ループ内に要素をhlistに入力することを想像してください。要素は、特定の条件が成立するまで、どこか(UI、構成ファイル、アクターの相互作用、ネットワーク)から読み取られます。hlistの種類は何ですか?インターフェイス仕様のgetElements:HList [...]も同様です。これは、静的に不明な長さのリストで機能し、システム内のコンポーネントAがコンポーネントBから任意の要素のリストを取得できるようにします。
haskell - Haskell:HListとオプションのパラメーター
私はHListを使用してレコードを作成しようとしています。
HList-GHCSyntaxで定義されている演算子を使用しています。
これまでのところ非常にうまく機能しており、次のようなものを書くことができます。
これにより、次のことが可能になります。
および以下:
期待どおりにコンパイルエラーをスローします。param3
コンパイル時のパラメータチェックを取得するので、必要に応じてこれはうまく機能します。
ただし、オプションの場合も扱いたいと思いparam3
ます。これどうやってするの?
編集:以下は機能しているようです(Empty
空のタイプです):
Empty
しかし、私はコードを呼び出す際にチェックする方法を本当に知りません。
haskell - このDataKindsがサポートする異種リスト実装のOverlappingInstancesを削除することは可能ですか?
HaskellDBに関する最近の投稿で、私はHListをもう一度調べるようになりました。異種リストの例が実際にあるGHCにあるよう-XDataKinds
に、HListがDataKindsでどのように見えるかを調査したいと思いました。これまでのところ、私は次のものを持っています:
これは期待どおりに機能しますが、このプロジェクトでの私の目標は、可能な限り型クラスなしでそれを実行することでした。したがって、ここには2つの質問があります。(=?)
まず、型クラスなしで(レコードフィールドアクセサ関数)を書くことは可能ですか?そうでない場合は、インスタンスを重複させずに書き込むことができますか?
私の最初の質問では不可能だと思いますが、2番目の質問は可能かもしれません。人々の意見を聞きたいです!
haskell - テンプレート Haskell コンパイル エラー
次のコードを検討してください。
これは正常にコンパイルされ、期待どおりに「Hello1」が出力されます。
ただし、次の行 (GHC 7.4.1) を追加すると、コンパイル エラーが発生します。
与えられたエラーは次のとおりです。
f2
行を追加するとコンパイルエラーになるのはなぜですか?
注: Template Haskell のパーツはここではばかげているように見えるかもしれませんが、タプルで機能するより複雑な Template Haskell を単純化したものです。まだエラーが発生している、作成できる最も単純な例を投稿しました。この場合、テンプレート Haskell を削除すると問題が解決することはわかっていますが、それは私の実際のコードではオプションではありません。
編集:
さらに、以下はコンパイルに失敗します。なぜそうなのか: