問題タブ [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 投票する
3 に答える
18109 参照

scala - Scala Tuples で関数コンビネータを使用しますか?

'map' は要素の数を保持するため、Tuple で使用することは理にかなっているようです。

これまでの私の試み:

それはかなり苦痛に見えます...そして、私はそれをタプルに戻そうとさえしていません。
私はそれを間違っていますか?ライブラリを改善できますか?

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

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 になりました。ヒントをいただければ幸いです。

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

scala - Shapeless : 前に追加します。暗黙的に見つかりません

shapeless を使用して、タイプセーフな方法でオブジェクトを簡単に蓄積しようとしています。

:::問題は、concat( ) twoを実行したい場合ですHList。私は初心者(少なくともそう思われる)の問題に遭遇しています。コンテキスト内のPrepend暗黙的なインスタンスがありません。

しかし、 を調べるhlist.scalaと、ジェネリックがオブジェクトとimplicit defで定義されていることがわかります。PrependPrependAux

手動で追加import Prependしてimport PrependAuxも何も変わりませんでした(明らかに...)。

したがって、ここでコードを最小限に抑えます。

コンソールで次のようにします。

何が私の目を燃やすべきですか?

ありがとう

編集

下品化が以前は強すぎたため、実際の問題を少し再複雑化するための小さな更新。

これが私ができることのようなものです:

したがって、実際の型にアクセスすることはできません。それらがHListであることを知っているだけです。

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

scala - 別のHListにマッピングして取得したHListにインデックスを付けることができないのはなぜですか?

でも.head動作しません。

これを機能させるには、どのような変更を加える必要がありますか?

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

scala - HList にマップできません

この問題を shapeless で解決しようとしていました。しかし、何らかの理由で にマッピングできませんHList。コードに語らせます。

エラーメッセージは次のとおりです。

マッピングが機能しないのはなぜですか?

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

scala - 非同期匿名クラスを関数に置き換える

これは shapeless ライブラリで可能かもしれないと考えています。

shapeless を使用して匿名クラスをクロージャーに変換しています。これにはhlistedfromFnHListerAuxトレイトの使用が必要です。

やりたいことは、渡されたダミー関数を取り除き、 と同じ型シグネチャを持つこの関数の周りにクロージャを返すことだけFです。非同期で実行される匿名クラスがなければ、これは簡単です。これを回避する方法はありますか?

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

scala - HListsは、タプルを書くための複雑な方法にすぎませんか?

私は、違いがどこにあるのかを調べ、より一般的には、HListを使用できない(つまり、通常のリストよりもメリットがない)標準的なユースケースを特定することに本当に興味があります。

(Scalaには22個(私は信じています)があることを知っていますがTupleN、必要なHListは1つだけですが、それは私が興味を持っている概念上の違いではありません。)

以下のテキストでいくつかの質問にマークを付けました。実際には答える必要はないかもしれませんが、私には不明確なことを指摘し、特定の方向に議論を導くことを目的としています。

動機

私は最近、この質問への削除された回答を含む、人々がHListsの使用を提案したSOに関するいくつかの回答(たとえば、Shapelessによって提供されたもの)をました。それはこの議論を引き起こし、それが今度はこの質問を引き起こしました。

イントロ

hlistは、要素の数とその正確なタイプを静的に知っている場合にのみ役立つように思われます。数は実際には重要ではありませんが、変化するが静的に正確に知られているタイプの要素を含むリストを生成する必要はないようですが、それらの数は静的にはわかりません。質問1:たとえば、ループでそのような例を書くことさえできますか?私の直感では、静的に未知の数の任意の要素(特定のクラス階層に対して任意)を持つ静的に正確なhlistを持つことは、互換性がありません。

Hリストとタプル

これが当てはまる場合、つまり、数値とタイプを静的に知っている場合-質問2: nタプルを使用しないのはなぜですか?確かに、HListをタイプセーフにマッピングして折りたたむことができます(タイプセーフではありませが、の助けを借りてタプルをオーバーすることもできますproductIterator)が、要素の数とタイプは静的にわかっているため、おそらくタプル要素にアクセスするだけで済みます直接操作を実行します。

一方、fhlistにマップする関数が非常に一般的で、すべての要素を受け入れる場合-質問3:を介してそれを使用しないのはなぜproductIterator.mapですか?わかりました。メソッドのオーバーロードから1つの興味深い違いが生じる可能性があります。オーバーロードされたものが複数ある場合f、(productIteratorとは対照的に)hlistによって提供されるより強力な型情報を使用すると、コンパイラーはより具体的なを選択できますf。ただし、メソッドと関数は同じではないため、Scalaで実際に機能するかどうかはわかりません。

Hリストとユーザー入力

同じ仮定に基づいて、つまり、要素の数とタイプを静的に知る必要があるということです-質問4:要素がユーザーの操作に依存している状況でhlistを使用できますか?たとえば、ループ内に要素をhlistに入力することを想像してください。要素は、特定の条件が成立するまで、どこか(UI、構成ファイル、アクターの相互作用、ネットワーク)から読み取られます。hlistの種類は何ですか?インターフェイス仕様のgetElements:HList [...]も同様です。これは、静的に不明な長さのリストで機能し、システム内のコンポーネントAがコンポーネントBから任意の要素のリストを取得できるようにします。

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

scala - シェイプレスでサイズnのリストを返すメソッド

次のコードを機能させることは可能ですか?

「パラメータtoIntNの暗黙の値が見つかりませんでした:shapeless.ToInt[N]」というコンパイルエラーが発生します。

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

scala - Scalaでの引数のタイプに基づいて、関数のリストのサブセットを選択する

これは問題のコードです。説明/説明の一部が以下に含まれています

基本的に、私の目標は、関数のリストを保持し、それらのタイプ(入力と出力)を保持し、それらが入力として受け取るものと出力として受け取るものに基づいて特定の関数を検索する機能を用意することです。ある種のモンキーパッチがなければ、これはスカラでは不可能だと私は信じ始めています。これは避けたいと思います。

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

scala - 追加の制約があるScalaシェイプレスKList

私はこのパターンを取りたい:

KListただし、すべてのアリティを手動でオーバーライドするのではなく、を受け入れるようにします。RList基本的には、「同じSメンバータイプのsをいくつでも取得する」と言いたいです。

RListタイプを含む特性Sです。(RListの背景と、これを行う理由については、「起点に基づく関数の制約(パス依存型?型生成?)」を参照してください) 。