問題タブ [shapeless]

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 に答える
573 参照

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 は、他の多くのハックに加えて、すでにうまく機能しています。

アドバイスをありがとう。

0 投票する
5 に答える
8456 参照

scala - オプションのタプルを Scalaz や Shapeless でタプルのオプションに変換する

持つ

私は得ることを期待しています

そして持つ

私は得ることを期待しています

0 投票する
4 に答える
12201 参照

scala - scala が依存型を明示的にサポートしていない理由はありますか?

パス依存型があり、Epigram や Agda などの言語のほぼすべての機能を Scala で表現することは可能だと思いますが、他の分野で非常にうまく機能するように、なぜ Scala がこれをより明示的にサポートしないのか疑問に思っています (たとえば、 、DSL) ? 「必要ない」など、私が見逃しているものはありますか?

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

scala - クラスのタイプパラメータに基づいて、Poly1を使用するメソッドのHListにマップします

私はクラスを持っており、パラメータ化されてHListおり、他のタイプもあります。そのメソッドの1つでmapどのように使用できますか?HList

このコードをコンパイルすると、次のようになりますjava.lang.AssertionError

私の目標はこの種の結果です:

0 投票する
3 に答える
1121 参照

scala - Scala ケースクラスを一般的に書き換える

ケースクラスの引数を一般的に置き換えることは可能ですか? より具体的には、「検索」ケース・クラスと「置換」ケース・クラス (文法規則の左側と右側のようなもの)、およびターゲット・ケース・クラスを受け取る代替関数が必要であるとします。検索ケース・クラスの引数を置換ケース・クラスに置き換えた新しいケース・クラス? この関数は、単純にケース クラス (Product?) と、ケース クラスのすべての引数/製品に適用される関数を受け取ることもできます。

明らかに、特定のケース クラスがあれば、unapply と apply を使用できますが、この種の関数を一般的に (任意のケース クラスを指定して) 記述する最善/最も簡単/その他の方法は何ですか?

Scala 2.10 のリフレクション機能または shapeless の Iso.hlist を使用する良い解決策があるかどうか疑問に思っています。

たとえば、私が本当にできるようにしたいのは、次のようなクラスが与えられた場合です...

... 任意のケース クラスを取り、From 型の要素を To 型のインスタンスに置き換えたコピーを返すことができる関数があります。

0 投票する
3 に答える
839 参照

scala - Scala の可変長インデックスを使用した「update」メソッド

可変次元の配列のようなコードを書いていました。私がしていることは、線形の基礎となるコレクションを維持し、それをインデックス アクセス メソッドでラップすることです。データ構造の次元がわからないので、次のように書きます

そして、それは完璧に機能します。ただし、メソッドと += のような演算子を更新するために同じことを行うことはできないため、次のようなメソッドを記述することになります。

これは問題ありませんが、私が本当に欲しいものではありません。更新に関する問題は、次の 2 つの方法で修正される可能性があると思います。

  1. update 関数の引数の順序を変更すると、見た目がおかしくなります。
  2. 最後のものとしてではなく、可変長の引数を許可します。この質問は一般的な設定で尋ねられることがわかり、カリー化関数を使用して解決できますが、ここでは適用されません。

+= に関する問題はより複雑に見え、インデックスが固定長の場合にも存在します。+= 演算子を持つオブジェクトを追加し、 this(...) を使用してオブジェクトを取得することもできます (これにより、 this(...) += v は期待どおりに何らかのメソッドを呼び出します)。適用方法。

上記の質問のいずれかに対する解決策がある場合、またはこのようなコードを記述できない理由がある場合は、アイデアを共有してください! ありがとう〜

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

scala - scala で「uncurried」を提供する一般的なエンリッチメント

f: A => B => ... => Zscala/scalaz/shapeless/etcの一般的なエンリッチメントはありますか? そのようなf.uncurried:(A, B, ...) => Z

現在、私はこれを持っていますが、既存のより一般的な解決策がどこかにあるに違いないと思います。

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

scala - Shapeless を使用してリスト処理を駆動するために関数引数のアリティを解決する際の問題

次の要点には、私が遊んでいるアイデアのコードがあります

関数の引数のアリティ (この場合は製品型のアリティ) を使用して、関連付けられた List[A] の解析を実行するという考え方です。粘着テープを使用してグラファイトからグラフェンの層を剥がすようなものです。つまり、関数のタイプがリストから物を引き出します。これは単一の包含型を使用した単なるスケッチですが、一般化できると思います。重要な点は、関数自体が List 処理を認識していないことです。

ただし... ToArity[P,N] 暗黙を解決しようとすると、概念が失敗するようです。printArity() によって証明されるように、それ自体で ToArity は解決可能です。

なぜこれがfromF1のコンテキストで解決できないのか、誰かが光を当てることができますか? 依存する暗黙のすべてを解決できず、エラーを最初のものに登録できない、つまり、ToArity、ToInt、および SizedHListAux を満たす N が見つからないということですか?

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

scala - シェイプレスを使用して[x]->xをscalaに実装するにはどうすればよいですか?

シェイプレスを使用して1つの要素のリストの先頭を取得するにはどうすればよいですか?これはコンパイルされません:

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

scala - シェイプレスを使用してscalaリストで分割する方法

サイズSのリストをNで分割しようとしています。ここで、N、Mの合計はSになることがわかっています。これはコンパイルされません。

エラー

最終的な正しいバージョン