問題タブ [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.
haskell - テンプレート Haskell コンパイル エラー
次のコードを検討してください。
これは正常にコンパイルされ、期待どおりに「Hello1」が出力されます。
ただし、次の行 (GHC 7.4.1) を追加すると、コンパイル エラーが発生します。
与えられたエラーは次のとおりです。
f2
行を追加するとコンパイルエラーになるのはなぜですか?
注: Template Haskell のパーツはここではばかげているように見えるかもしれませんが、タプルで機能するより複雑な Template Haskell を単純化したものです。まだエラーが発生している、作成できる最も単純な例を投稿しました。この場合、テンプレート Haskell を削除すると問題が解決することはわかっていますが、それは私の実際のコードではオプションではありません。
編集:
さらに、以下はコンパイルに失敗します。なぜそうなのか:
scala - HList/KList はメソッドのパラメーターとして適していますか? 参照する方法は?タイプリスト?
私は HList / KList を発見しました。それらはかなりクールです。私は実際のユース ケースを持っています。このユース ケースでは、保存された型情報を持つ異種の型と可変長のコンテナーが非常に役立ちます (詳細については、以下の背景を参照してください)。ただし、H/KList をメソッド パラメーターとして使用する方法を理解していません。この場合、パラメーターに完全に型注釈を付けたり、型情報を緩めたりする必要があります。もちろん、完全な型が不明な場合、H/KLists をパラメーターとして使用することはできますか? 型情報を失うことなく H/KList を参照する方法は?
「型リスト」を使用して、異種の可変長型パラメーターのタプルを参照できますか? ここでは、次のように述べ
... the types of the elements can be tracked separate from the actual element values. To do this we create an purely abstract type (it has no instances) which models a list of types, let's call it TList.
ています。いじってみましたが、パラメーターとして HList の型注釈に使用する方法をまだ理解していません。
基本的に、私はこのようなものが欲しいです:
ここで、TL は型リストを指し、X は現在の要素の型を指します。したがって、ここで HList は、型リスト TL によってパラメータ化された別のタプルのようなコンテナーである TypedLink にマップする必要があります。要素は、現在の型 X で型指定された、さらに別のパラメーター化されたコンテナー TypedHandle にそれぞれラップされます。
これは可能ですか?
Shapeless の HList とその "unify" メソッドを見ましたが、問題は同じままです。可変長以外に、パラメーター リストでそれを参照する方法がわかりません。
2 番目の希望は、KList を使用することでした。TypedHandle は同じコンストラクターを持つ共通のコンテナーであるため、私の場合に適用されます。apocalisp によると、 KListを使用すると、注釈を入力するのが簡単に見えます。
タイプは次のとおりです。
ただし、問題は同じままです。メソッド定義では、それが
または
そのため、KList をメソッド パラメータとして型注釈する方法もわかりません。
ヒントをありがとう!
背景: 私は優れた OO およびグラフ データベース hypergraphdb の便利な scala 拡張機能を作成しています。Hypergraphdb のハイパーエッジである HGLink は、基本的に HGHandle のタプルです。HGHandle は、それ自体が型付けされたアトムを参照します。したがって、HGLink 自体は異種の型であり、可変長です。ただし、HGLink の実装はこれまで型指定されておらず、型指定されていない HGHandle の実装によって構築されていました。Java の型システムは、hypergraphdb の (はるかに優れた) 型システム (たとえば、より高い種類の型もある) を反映するほど表現力がないと思います。
基本的に、私は scala の型システムと hypergraphdb の型システムを橋渡ししようとしています。多くのことを学んでいますが、今までは本当に楽しかったです。TypedHandle は、他の多くのハックに加えて、すでにうまく機能しています。
アドバイスをありがとう。
perl - Tk :: HListの選択範囲の点線を削除するにはどうすればよいですか?
Tk :: HListのエントリをシングルクリックで選択すると、このエントリの周りに点線が描画されます。私はこの線を持ちたくありません。どうすれば設定できますか?私はそれを行うための文書化された方法を見ていません。
これは、事前に選択されたエントリを持つTk::HListを示すサンプルコードです。エントリをクリックすると、点線が表示されます。
scala - クラスのタイプパラメータに基づいて、Poly1を使用するメソッドのHListにマップします
私はクラスを持っており、パラメータ化されてHList
おり、他のタイプもあります。そのメソッドの1つでmap
どのように使用できますか?HList
このコードをコンパイルすると、次のようになりますjava.lang.AssertionError
。
私の目標はこの種の結果です:
scala - 2つのHListからすべてのペアのHListを作成する
Scalaでshapelessを使用していますが、2つのHListを受け取り、要素のすべてのペアのHListを返す関数allPairsを作成したいと思います。例えば:
これを行う方法はありますか?
また、インライン化されたコードブロックではなく、関数を探していることを強調したいと思います。
haskell - Haskell:Hlistに「表示可能」なすべての要素を表示する
私が試してみました
しかし、それは戻った
haskell - 汎用関数を使用した異種データ構造のマッピング
私は HList の実装に取り組んでおり、そのmap
関数を実装しようとして立ち往生しています。私はさまざまなアプローチを試しましたが、それぞれのアプローチでその関数に関連するコンパイラ エラーが発生します。
以下は、ジェネリック関数Just
を使用して入力データ構造のすべての要素に適用する方法の例です。
これにより、次のコンパイラ エラーが発生します。
これを解決する方法はまったくありますか?そうでない場合は、なぜですか?
haskell - HList のアイテムの共有制約
HList の次の定義があるとします。
そのアイテムに共有制約を何らかの方法で強制することは可能ですか?
例として、以下はアイテムがShow
インスタンスを持つように制約しようとする私の試みであり、これは で失敗しますCouldn't match type `Char' with `Int'
:
scala - Shapeless: 多相関数の型制約のチェック
私は、タイプを使用して、エンティティの単位をチェックする経済モデルの小さなライブラリに取り組んでいval apples = 2.0
ますval apples = GoodsAmount[KG, Apples](2.0)
。商品のバンドルを作成するために、シェイプレス ライブラリの HLists を使用しようとしています。これは問題なく動作しますが、場合によっては、私が好むほど汎用的なコードにすることはできません。たとえば、次の問題を参照してください。
何をシェイプレスに持ち上げたいかを説明する簡単なコードから始めます。Km、その他のマイルを表す 2 つのクラスを作成します。Km クラスは追加できますが、マイルは追加できません。抽象型 T を使用する主な動機は、より複雑なライブラリです。そして、'+' 関数の間接的な呼び出しは、形状のないケースの後ろに似たものが必要なためです。
これは意図したとおりに機能します。ただし、「add」関数で型制約チェックを行う必要があります。これを HLists に拡張する私の試みは次のようになります。
しかし、これは次のエラーメッセージを生成します (Scala 2.10.2 を使用):
type Constraint を caseTuple 関数に追加できた場合、最初のエラーを修正する必要がありますが、正直なところ、at 関数がどのように機能しているか、暗黙の証拠パラメーターをどこに追加できるかを理解していません。また、マッパーが暗黙の値を見つけるために何をしなければならないかもわかりません。
caseTuple 関数を次のように置き換えます。
正常に動作しますが、多くの冗長なコードを記述する必要があります (わかりました、このソリューションは、タプルを使用する現在のソリューションよりも優れています)。誰かがこの問題を解決する方法を教えてもらえますか?
ありがとう、クリンケ