- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如此处所述
Type-safe way to divide a tuple into multiple tuples
我有一个具有以下签名的方法
def execute[T <: Record](funs: Seq[(Session) => T]): Seq[T]
Session
是
Slick数据库 session ;这种方法的基本实现是
def execute[T <: Record](funs: Seq[(Session) => T): Seq[T] = {
db withSession {
session: Session => funs.map(fun => fun(session))
}}
db
是一个 Slick
Database
)以及其他添加诸如日志记录、缓存、多线程等内容的实现。特别是,多线程实现使用
funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})
在几个线程之间划分功能。
HList
s - 但是我不清楚如何创建
(Session) => T
的多态变体函数,问题在于我见过的所有多态函数示例都使用包装类型参数,例如
(Set ~> Option)
每个包裹一个多态
T
,但我正在尝试创建一个
(Session ~> T)
函数 where
Session
是不变的和多态的
T
没有包裹在
Set
或
Option
等等。由于对 Shapeless 没有足够的经验,我无疑以错误的方式看待这个问题。
def execute(funs: Seq[(Session) => T]): Seq[T]
的多态版本功能?
最佳答案
您实际上并不真正需要或想要这里的多态函数——您可以从 Shapeless 提供的一些开箱即用的类型类中获得您正在寻找的东西。它看起来有点奇怪,但实际上并没有那么复杂(请注意,我使用的是 Shapeless 2.0——你可以在 1.2.4 中这样做,但它会更困惑):
import shapeless._, ops.tuple.{ ConstMapper, ToList, ZipApply }
import shapeless.syntax.std.tuple._
def execute[F <: Product, S, O](funs: F)(implicit
cm: ConstMapper.Aux[F, Session, S],
za: ZipApply.Aux[F, S, O],
tl: ToList[O, Record]
): O = db withSession { session: Session =>
funs.zipApply(funs.mapConst(session))
}
ToList
部分要求结果元组的所有元素都是
Record
的子类型.
type Session = String
trait Record
case class RecordX(s: String) extends Record
case class RecordY(i: Int) extends Record
def x(s: Session) = RecordX(s)
def y(s: Session) = RecordY(s.size)
object db {
def withSession[T](f: Session => T) = f("foo")
}
scala> execute((x _, y _))
res0: (RecordX, RecordY) = (RecordX(foo),RecordY(3))
关于scala - 使用裸类型参数创建一个无形的多态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418309/
我对 Lift Cookbook for AJAX Forms 感到困惑,我遇到了以下对象声明: object EchoForm extends { 这很令人困惑,所以我尝试了一下,它编译得很好。我的
我正尝试按照指示在裸 CSS 模态窗口内实现视频 here到目前为止效果很好。我遇到的唯一问题是视频在模态窗口打开之前自动启动(我必须保留视频“自动启动”选项)。模态窗口关闭时视频也不会停止。 是否有
同样,裸 char16_t 是有符号的还是无符号的?是否定义了实现? 最佳答案 来自标准(C++11 前草案 n3290,或 C++11 后草案 n3337)§3.9.1 基本类型: Types ch
我使用 C# 编程已经...有一段时间了。我最近编写了一个例程,我突然想到这是我第一次(我记得)我故意使用裸代码块(即没有前面的控制流语句)。代码看起来像这样: //... var output =
我最近开始使用 nativescript,但我遇到了一个似乎无法解决的问题。 我想要完成的是只打开一个基本的 WebView 并设置一个外部 url 来加载,例如 stackoverflow.com。
我通过以下方式创建了一个共享仓库: git init --bare my_project.git 在某个时候,另一个用户用他的更改更新了这个 repo(使用 git push )。 我如何检查共享存储
我刚刚浏览完 Google 搜索结果,其中包含所有关于 git 无法克隆空存储库是多么愚蠢的电子邮件咆哮。一些善良的灵魂甚至提交了一个补丁。在升级 git 之前,克隆空的、裸 git 存储库的最简单、
我喜欢编写一些 wordpress 模板,并搜索了一些可用的裸模板,我可以从这些模板开始。 因为我是 wordpress 的新手,你能推荐最好的裸模板作为我可以使用的基础吗? 干杯 最佳答案 在我看来
我正试图找到一个最新的答案,以使用 Godaddy 和 Heroku SSL 设置裸域。我的目标是让所有页面都登陆安全页面 https://www.example.com https://www.ex
这个问题在这里已经有了答案: What's the -practical- difference between a Bare and non-Bare repository? (11 个答案) 关
我运行一个 git 服务器,它只包含裸远程。比如说,我有一个名为 DIG.git 的裸 Remote ,我通常使用它进行克隆: git clone 55.66.77.88:git/DIG.git 我想
是否有一个用于裸 git repo 目录的 GUI(任何地方都没有工作树)我可以: 检查日志 查看任何提交的整个工作树结构 关于我为什么需要这个: 我的 git 是这样初始化的: git --git-
我有一台服务器托管我的几个项目的“裸”GIT 存储库。 我想知道如何将 GIT 移动到另一台服务器? 最佳答案 只需将父目录复制到新机器,并让 check out 的副本使用 git remote s
我有一个域 example.com 和 www.example.com。我正在为 DNS 使用 Heroku 和 Zerigo。现在我有一个从根域到 www.example.com 的转发从我的 Ho
我的服务器已经在 TCP 端口 80 和 443 上运行 IIS。我想通过 Internet 为我的所有团队成员提供一个集中的“推/pull ”Git 存储库。 所以我应该使用 HTTP 或 HTTP
裸露的 SUM 和包裹在 CALCULATE 中的 sum 有什么区别? Measure1 = SUM( tab[col1]) ) Measure2 = CALCULATE ( SUM( tab[co
我是一名优秀的程序员,十分优秀!