博客
关于我
Scalaz(21)-类型例证:Liskov and Leibniz - type evidence
阅读量:453 次
发布时间:2019-03-06

本文共 726 字,大约阅读时间需要 2 分钟。

Leskov 和 Leibniz 是 ScalaZ 库中的 Type Class,用于类型操作和隐式转换。在 ScalaZ 中,<~< 和 === 是对应于标准 Scala 中的 <:< 和 :=: 的符号。这些符号用于类型限定和转换,帮助在不明确类型的情况下确保类型一致性。

在 BindSyntax.scala 中,join 方法使用了 Leskov 和 Leibniz 作为隐式参数。join 方法在 Monad 中用于打平嵌套的效果。例如,List(List(1), List(2), List(3)).join 会成功执行,因为它隐式地将 List[List[Int]] 转换为 List[Int]。然而,List(1.some, 2.some, 3.some).join 会失败,因为缺少 Leibniz 实例来将 Option[Int] 转换为 List[B]。

通过分析 Leibniz 和 Liskov 的定义,我们可以理解它们在类型转换中的作用。Leibniz 主要用于显式类型转换,而 Liskov 用于隐式子类型转换。例如,Liskov 的 subst 方法允许在不明确类型的情况下进行类型转换。

在实际代码中,join 方法通过 F.bind(self)(ev(_)) 实现,其核心在于正确的 Leibniz 实例能够将嵌套类型成功转换为目标类型。例如,List[List[Int]] 被转换为 List[Int],这依赖于 Leibniz 或 Liskov 实现的隐式转换。

总的来说,Scala 的类型系统和 ScalaZ 库为开发者提供了强大的类型安全和灵活性工具,使得在复杂类型转换和嵌套操作中能够保持一致性和可靠性。

转载地址:http://zfefz.baihongyu.com/

你可能感兴趣的文章
Python web自动化测试 —— 文件上传!
查看>>
Python Web自动化测试开发环境搭建(附安装包与虚拟机环境)
查看>>
python win32api键盘_Python win32api.keybd_event模拟键盘输入
查看>>
python Windows显示当前鼠标坐标
查看>>
python Workbook 表格宽度
查看>>
python | flanker,一个神奇的 Python 库!
查看>>
python | flower,一个强大的 Python 库!
查看>>
python | funcy,一个超强的 提供函数式编程工具 Python 库!
查看>>
python | ggplot,一个超强的 Python 库!
查看>>
python | grab,一个强大的 Python 库!
查看>>
python | rich,一个无敌的 Python 库!
查看>>
python | rq,一个无敌的 关于Redis 的Python 库!
查看>>
python | unoconv,一个超厉害的 Python 库!
查看>>
python | urllib3,一个超强的 Python 库!
查看>>
python | webassets,一个超强的 Python 库!
查看>>
python | werkzeug,一个不可思议的 Python 库!
查看>>
python | xlsxwriter,一个实用的 Python 库!
查看>>
python | xlwings,一个非常实用的 Excel 相关的 Python 库!
查看>>
python | 一文看懂Python闭包机制与变量作用域规则
查看>>
python读取含中文的json
查看>>