- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Shapeless 并实现了一个简单的异构树
我希望能够提取保留类型信息的标签。我很努力,但还没有草图来展示解决方案。任何帮助表示赞赏!
object TreeTest {
import shapeless._
case class HTree[A, F <: HList](label: A, forest: F) {
def withBranch[T, FF <: HList](tree: HTree[T, FF]): HTree[A, HTree[T, FF] :: F] = new HTree(label, tree :: forest)
}
object HTree {
def apply[A](label: A) = new HTree[A, HNil](label, HNil)
}
val t1 = HTree(1)
val t2 = HTree("1")
val t3 = t2.withBranch(HTree(2.0))
val t4: HTree[Int, HTree[String, HTree[Double, HNil] :: HNil] :: HNil] = t1.withBranch(t3)
def labels[A, F <: HList](t: HTree[A, F]) = ???
val flattened: Int :: String :: Double :: HNil = labels(t4)
}
最佳答案
我能够创建一个递归多态函数来提取您的 HTree
的标签:
import shapeless._, ops.hlist._
object getLabels extends Poly1 {
implicit def caseHTree[A, F <: HList, M <: HList](implicit
fm: FlatMapper.Aux[getLabels.type, F, M],
prepend: Prepend[A :: HNil, M]
) : Case.Aux[HTree[A, F], prepend.Out] =
at[HTree[A, F]](tree => prepend(tree.label :: HNil, fm(tree.forest)))
}
它将当前 HTree
的标签添加到它递归获取的分支的标签(在 forest
上进行平面映射)。
t4
的结果:
getLabels(t4)
// Int :: String :: Double :: HNil = 1 :: 1 :: 2.0 :: HNil
关于scala - 异构树的类型级展平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426077/
我有一个 NSTreeController (向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的子对象)属于另一个类。解决这个问题的最佳方法是什么?
我有一个如下所示的 GADT data MyTypes = MyInt | MyDouble data Test (t :: MyTypes) where A :: Int -
我需要一个高效的异构数组,其中第一个元素是 int,其余是 float。然而,创建它之后,基本的数组操作就会呈爆炸式增长。 A = np.zeros(1, dtype='i4, f4, f4') B
我有一个 pandas DataFrame,其中包含需要拆分成平衡切片的字符串和浮点列,以便训练 sklearn 管道。 理想情况下,我会使用 StratifiedKFold在 DataFrame 上
是否有一种异构容器的形式,能够存储例如不同的基本类型(例如int、float、double)? 最终我希望能够在计算中使用元素而无需显式引用类型,例如 auto res = a + b,其中操作数 a
假设我有一个结构(或类),如下所示: struct _particle { std::vector vx , vy; std::vector id; std::vector rx, ry; }; ty
我在将具有 > 22 列的表专门映射到 case class 时遇到问题,假设您有以下代码 import slick.driver.PostgresDriver import scala.slick.
我是一名优秀的程序员,十分优秀!