Shapeless を学習しようとしています (バージョン 2.10.2 を使用)。非常に単純な拡張可能なレコードを作成しました。
val rec1 = ("foo" ->> 42) :: HNil
REPL によると、これには型があります
shapeless.::[Int with shapeless.record.KeyTag[String("foo"),Int],shapeless.HNil]
私は単純な関数を定義しようとしています:
def fun(x: ::[Int with KeyTag[String("foo"), Int], HNil]) = x("foo")
しかし、それはコンパイルさえしません。型宣言で String("foo") を使用できず、エラーが発生します。
2 つの質問があります。
- コードで拡張可能レコードのタイプを指定するにはどうすればよいですか?
- より多くのフィールドを持つレコードを操作する場合、型宣言の長さと複雑さが管理できなくなります。レコードの特定のインスタンスまたはその他の回避策を指定して、型のエイリアスを作成する方法はありますか?
編集
私はそれを発見しました:
val rec1 = ("foo" ->> 42) :: HNil
val rec2 = ("foo" ->> 43) :: HNil
var x = rec1
x = rec2
うまくいきます。rec1、rec2、および x は同じ型であると結論付けています。その型をコードで表現する方法がわかりません!