Transform/traverse无形的HMap
Transform/traverse Shapeless' HMap
Shapeless' HListOps
包括许多 useful functions 的异构 HList
类型。我找不到 HMap
.
的等效项
这是我的目标。我有一个简单的 Map[String, String]
,它在我的应用程序的很多地方用作消息处理管道中的选项存储库。我现在想通过将其转换为 HMap 向该地图添加不同的 (Key => Value)
,因此它可能类似于:
class HOptionsMap[K, V]
implicit val intToString = new HOptionsMap[String, String]
implicit val stringToInt = new HOptionsMap[String, Instant]
所以我可以进一步使用它如下:
val hm = HMap[HOptionsMap]("placeOfIncident" -> "Toronto", "incidentDate" -> Instant.now)
除了我想调用上面的 collect, fold, filter
之类的操作,这些操作不受支持(与 HList
不同)。这是为了不破坏当前功能的要求。
当然我可以在这里使用组合,但我很好奇这是否可以通过 Shapeless 库实现。
如果 HMap
对您的用例来说是一个不方便的抽象,请尝试使用记录
import shapeless.syntax.singleton._
val hm = "placeOfIncident" ->> "Toronto" :: "incidentDate" ->> Instant.now :: HNil
你可以像任何东西一样收集、折叠、过滤它HList/record。
https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#extensible-records
Shapeless' HListOps
包括许多 useful functions 的异构 HList
类型。我找不到 HMap
.
这是我的目标。我有一个简单的 Map[String, String]
,它在我的应用程序的很多地方用作消息处理管道中的选项存储库。我现在想通过将其转换为 HMap 向该地图添加不同的 (Key => Value)
,因此它可能类似于:
class HOptionsMap[K, V]
implicit val intToString = new HOptionsMap[String, String]
implicit val stringToInt = new HOptionsMap[String, Instant]
所以我可以进一步使用它如下:
val hm = HMap[HOptionsMap]("placeOfIncident" -> "Toronto", "incidentDate" -> Instant.now)
除了我想调用上面的 collect, fold, filter
之类的操作,这些操作不受支持(与 HList
不同)。这是为了不破坏当前功能的要求。
当然我可以在这里使用组合,但我很好奇这是否可以通过 Shapeless 库实现。
如果 HMap
对您的用例来说是一个不方便的抽象,请尝试使用记录
import shapeless.syntax.singleton._
val hm = "placeOfIncident" ->> "Toronto" :: "incidentDate" ->> Instant.now :: HNil
你可以像任何东西一样收集、折叠、过滤它HList/record。
https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#extensible-records