作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将使用精彩的图书馆https://tpolecat.github.io/doobie/它功能齐全。
我正在通过first example我已经认识到:
A Transactor is a data type that knows how to connect to a database, hand out connections, and clean them up; and with this knowledge it can transform
ConnectionIO ~> IO
, which gives us a program we can run.
ConnectionIO ~> IO
是范畴论中的自然变换,但一直没有完全理解,究竟什么是自然变换。
F[A] ~> G[A]
F
的自然变换至
G
在不改变内容的情况下。
ConnectionIO ~> IO
进行自然转换?
最佳答案
I know it [natural transformation] is transformation from one category into other category.
List
和
Option
是
functors .它们将对象映射到对象(类型
A
到类型
List[A]
,类型
A
到类型
Option[A]
)和态射到态射(函数
f: A => B
到函数
_.map(f) : List[A] => List[B]
,函数
f: A => B
到函数
_.map(f) : Option[A] => Option[B]
)。
headOption
是
natural transformation (
List ~> Option
)
val headOption: (List ~> Option) = new (List ~> Option) {
def apply[A](as: List[A]): Option[A] = as.headOption
}
val headOption: [A] => List[A] => Option[A] =
[A] => (as: List[A]) => as.headOption
Not everything can be naturally transformed and the question is, how do the author of library doobie know, that he can do the natural transformation from
ConnectionIO ~> IO
?
ConnectionIO[A] => IO[A]
(
A
运行在所有类型上)并且这个族是使用参数多态性定义的(而不是临时多态性,即类型类,即在没有对类型
A
的额外假设的情况下定义)=参数性,然后自然性遵循参数性“免费”。这是“免费定理”之一
关于scala - 它如何是自然的转变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61960312/
我是一名优秀的程序员,十分优秀!