問題タブ [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.
scala - シェイプレスからモノイドの例を再現できません
https://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/monoids.scalaからモノイドの例を再現しようとしています。
Shapeless-2.0.0-SNAPSHOT と Shapeless-2.0.0-M1 で試してみました。他に何か必要ですか?
ありがとうファビアン
scala - Scala に整数のタプルのリストを追加する
整数のタプルのリストを追加します。つまり、アリティ k のタプルの入力リストが与えられた場合、アリティkのタプルを生成します。そのフィールドは、リスト内のタプルの対応するフィールドの合計です。
入力
出力
を使用しようとしましたがfoldLeft
、コンパイルできません。現在、forループを使用していますが、より簡潔な解決策を探していました。
scala - shapeless を使用したポリモーフィック デシリアライズ関数
shapeless を使用して、hlists/csv のポリモーフィック デシリアライゼーション関数を作成しようとしています。
シリアライゼーション/デシリアライゼーションを提供する Value 型クラスの定義を次に示します (おそらく結果が返され、Option/Either/Validation が解析の失敗を示す必要があることは承知していますが、それは後で説明します)。
次のシリアル化関数はうまく機能します
サポートする Value[_] 型クラスを持つ型の HList に正常にマップできます。
試した逆シリアル化関数の 2 つの異なるバージョンを次に示します。
最終的にはこのような関数で使用したいと思います
ただし、逆シリアル化関数を使用して HList をマップしようとした場合、または次のように単独で使用しようとした場合でも:
コンパイラはあいまいな暗黙の値について文句を言います:
私の目標は、この関数を使用して HList of Value[_] 型の文字列のリストをマップしてそれらをシリアル化することですが、単一の文字列に「逆シリアル化」関数を適用しようとしても同じエラーが発生していたためです、まずその問題を解決したいと思っています。
scala は型レベルのカリー化をサポートしていないため、ここでコンパイラを導くための追加の型ヒントを提供するのに苦労しています。型ラムダのようなものを使用する必要がありますか?
このタイプの関数を表現できる他の方法はありますか?
scala - Shapeless Extensible Record を関数に渡す
Shapeless を学習しようとしています (バージョン 2.10.2 を使用)。非常に単純な拡張可能なレコードを作成しました。
val rec1 = ("foo" ->> 42) :: HNil
REPL によると、これには型があります
shapeless.::[Int with shapeless.record.KeyTag[String("foo"),Int],shapeless.HNil]
私は単純な関数を定義しようとしています:
しかし、それはコンパイルさえしません。型宣言で String("foo") を使用できず、エラーが発生します。
2 つの質問があります。
- コードで拡張可能レコードのタイプを指定するにはどうすればよいですか?
- より多くのフィールドを持つレコードを操作する場合、型宣言の長さと複雑さが管理できなくなります。レコードの特定のインスタンスまたはその他の回避策を指定して、型のエイリアスを作成する方法はありますか?
編集
私はそれを発見しました:
うまくいきます。rec1、rec2、および x は同じ型であると結論付けています。その型をコードで表現する方法がわかりません!
list - Scala の異種リスト; マップ機能を使う
したがって、問題は shapeless ライブラリhttps://github.com/milessabin/shapelessの HLists を理解することにあります。私はHLists
いくつかの関数を保存するために使用しています:
そして、それは完璧に機能します。リストから任意の関数を取得して適用できます。
list.head(object)
しかし、map
関数(list map mapFunc
)で適用するのに問題があります:
それは言いApplication doesnt take parameters
ます。では、どうすれば対処できますか?Mb私はsmthを理解していませんか?私はScalaが初めてです。
psコンストラクターには興味深い効果があります。このコードは少し間違っています:
function1(_) :: function2(_) :: HNil
何らかのタイプの関数として認識されますHList(function1(_), function2(_))
が、正しいタイプを持っています。
編集
'ps' が決定されました -function1(_) :: function2(_) :: HNil
本当に型の不一致があります。function1 _ :: function2 _ :: HNil
でも大丈夫です!
list - 動的に成長する異種リスト、Scala
永続化する方法はありますか (つまり、変数に保持することを意味します) (可能ですか?) 動的に成長しHList
ますか? 私の疑似コード:
明らかに、このコードは機能しません。それはうまくいきますが、タイプミスlist.head
の理由でさえできませんHList
(私が認識しているようにlist
、タイプパラメータをまったく保持していません)。
結果のタイプ:
だから、それは間違っています。
編集
上記の情報だけでは不十分です。
HList
だから私は、任意の型にすることができる変数のようなものをいくつかのオブジェクトに入れたいと思っていました。
HList
この変数を時々渡すため。
ps @milessabin mbは、私の問題に対する別の解決策を見つける方が良いということです。
scala - 変更可能な異種リスト、Scala
異種のリストである必要がある可変オブジェクトに要素を追加することは可能ですか?
つまり、私はダイクストラのアルゴリズムを扱っており、そのような方法でグラフの弧にいくつかの関数を保持する必要があります:
start
- は開始ノードです。end
- 終了ノード; f
- はノード間の何らかの機能であり、アークはこの機能を維持するためのオブジェクトであり、私にとって最も重要なことです。
すべて完璧ですが、ノード内のリストにすべてのアークを保持します。
おわかりのように、問題は、単純なリストでは型が失われることです。ノードに新しいアークを追加すると、タイプに関するすべての情報が失われます。
問題を解決する可能な方法は、次を使用することHLists
です。いくつかの作業コードの例(説明にさらに情報を追加するため):
ちなみに、今はすべてそのような方法です:
問題は、以下のコードのように (正しくない -- タイプ エラー)、この HList に要素を追加するにはどうすればよいかということです。
このタイプの不一致を渡す方法さえわからなかったので、すべての遷移をノードのフィールドとして保持し、すべてのタイプを保持する方法がわかりません。
編集
うーん、トランジションをコンストラクターに渡すことができ、可変オブジェクトをまったく使用しません。