Shapeless 中 Nat 类型的限制

2024-01-12

在无形中,Nat 类型代表了一种在类型级别对自然数进行编码的方法。例如,这用于固定大小的列表。您甚至可以在类型级别上进行计算,例如附加一个列表N列表中的元素K元素并返回一个在编译时已知的列表N+K元素。

Is this representation capable of representing large numbers, e.g. 1000000 or 253, or will this cause the Scala compiler to give up?


我自己也尝试一下。我很乐意接受特拉维斯·布朗或迈尔斯·萨宾的更好答案。

纳特目前可以not用于表示大数

在 Nat 当前的实现中,该值对应于嵌套的 shapeless.Succ[] 类型的数量:

scala> Nat(3)
res10: shapeless.Succ[shapeless.Succ[shapeless.Succ[shapeless._0]]] = Succ()

因此,为了表示数字 1000000,您需要一个嵌套 1000000 层的类型,这肯定会破坏 scala 编译器。根据实验,当前限制似乎约为 400,但为了合理的编译时间,最好保持在 50 以下。

但是,有一种方法可以在类型级别对大整数或其他值进行编码,前提是您不想对它们进行计算。据我所知,你唯一能做的就是检查它们是否相等。见下文。

scala> type OneMillion = Witness.`1000000`.T
defined type alias OneMillion

scala> type AlsoOneMillion = Witness.`1000000`.T
defined type alias AlsoOneMillion

scala> type OneMillionAndOne = Witness.`1000001`.T
defined type alias OneMillionAndOne

scala> implicitly[OneMillion =:= AlsoOneMillion]
res0: =:=[OneMillion,AlsoOneMillion] = <function1>

scala> implicitly[OneMillion =:= OneMillionAndOne]
<console>:16: error: Cannot prove that OneMillion =:= OneMillionAndOne.
       implicitly[OneMillion =:= OneMillionAndOne]
                 ^

这可以用于例如对 Array[Byte] 执行位操作时强制使用相同的数组大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shapeless 中 Nat 类型的限制 的相关文章

随机推荐

  • Django模型继承和管理系统

    我正在尝试构建一个系统来管理页面中各种类型的内容 例如 页面可以具有文本内容 超链接内容 视频内容等 在我的建模代码中 我有一个基类 class ContentItem models Model title models CharField
  • TypeError: 恰好需要 1 个参数(给定 2 个)Python 错误

    问题是我有这个功能 def fuerza repulsion x area 100 100 k math sqrt area len self grafo 0 return k 2 x c2 在这一行中 f mod self fuerza
  • 指定数据库时出现身份验证失败错误

    我正在尝试连接到mongodb来自我的网络应用程序 但是 我得到一个auth failed error当我指定要连接的数据库时 来自 mongo 如果我不指定数据库 则连接成功 我已经检查了拼写以及数据库是否使用 mongo 命令行退出sh
  • Pandas(python):列中的最大值定义新列中的新值

    我有一个大约有 50 列的 df Product ID Cat1 Cat2 Cat3 other columns 8937456 0 5 10 8497534 25 3 0 8754392 4 15 7 Cat 表示该产品有多少数量属于某个
  • 如何使用 RSA256 在 PHP 中创建有效的 JWT

    我也遇到过类似的困难question https stackoverflow com questions 35314629 how to sign data in php with hmac using a pem private key
  • 如何使用 dependency.yml 引用本地模块?

    如何使用引用本地模块依赖 yml 我想我会放弃这个问题 因为它定期在论坛中显示 答案应该如下 采用以下应用程序层次结构 myplayapp myfirstmodule mysecondmodule 我正在使用运行我的应用程序播放运行 myp
  • 如何通过引用分配lua变量

    如何在Lua中通过引用将一个变量分配给另一个变量 例如 想要执行相当于 a b 的操作 其中 a 将是指向 b 的指针 背景 有一个案例 我实际上有这样的事情 local a b c d e f g lots of variables if
  • 从容器重建 docker run 命令参数

    最好的重建方法是什么docker run来自现有 docker 容器的命令参数 我可以用docker inspect并使用在那里找到的信息 还有更好的办法吗 不是很容易 但是您可以通过格式化输出来做到这一点docker inspect 对于
  • C++ list::sort 的自定义比较函数

    您好 我在编译一段简单的代码时遇到问题 我正在创建一个实现一副纸牌的类 并且我想使用 list short 方法创建一个洗牌方法 相关代码 deck h ifndef DECK H define DECK H include
  • Git:配置 difftool 和 mergetool 的模式

    在 Mercurial 中 可以为外部差异和合并工具定义一种模式 以便仅针对与指定模式匹配的文件调用它们 diff patterns ext difftool merge patterns ext mergetool 如何在 Git 中定义
  • HasDbFunction,没有映射实体类的表值函数

    到目前为止我发现的所有内容 如果您调用表值函数 则返回值必须是 IQueryable 例如 public IQueryable
  • 使用 Scapy 与 C 套接字对话

    我有一个 UDP 连接并在端口 localhost 上侦听 并且我也尝试从 localhost 发送 Scapy 数据包 由于某种原因 我的 C 代码从未真正捕获数据包 但我可以很好地看到数据包显示在 Wireshark 中 我已经有一段时
  • 浮点计算使用 float 给出的结果与使用 double 给出的结果不同

    我有以下代码行 hero gt onBeingHit ENEMY ATTACK POINT 1 0 hero gt getDefensePercent void onBeingHit int decHP 方法接受整数并更新健康点 float
  • WPF ListView 在处理大数据时性能非常差

    我在 WPF 中使用 ListView 时遇到性能非常差的情况 使用大约 30000 条记录 据我所知 虚拟化应该打开 因为这是默认设置 我什至在 XAML 中显式打开它 表现不佳的表现是这样的 初始绑定非常慢 几分钟 滚动速度非常慢 超过
  • 单击将中止进一步执行,因为 Python 3 被配置为使用 ASCII 作为环境编码

    我将 Quokka Python Flask CMS 下载到 CentOS7 服务器上 通过命令一切正常 sudo python3 manage py runserver host 0 0 0 0 port 80 然后我创建一个文件 etc
  • 根据屏幕尺寸更改标签尺寸 xamarin 表单

    我正在使用 xamarin forms 来做一个应用程序 我发现使用相同的大小来向 ios 设备发送字母是行不通的 在 7 plus 上它运行良好 但在 iphone 5 上它对于屏幕大小来说是一个大字母 有人知道如何制作具有可缩放尺寸的字
  • 如何让javascript忽略转义(\)字符? [复制]

    这个问题在这里已经有答案了 qAnswersR 90430 qAnswersR 90430 push math k frac x 20 2 256 frac y 15 2 81 1 math 我需要将值放入变量中 但是当我像这样 conso
  • rtrim 函数不适用于结尾 h 字母[重复]

    这个问题在这里已经有答案了 file refinish php folder rtrim file php echo folder refinis 哪里结束h 我尝试了其他一些结尾字母 没关系 rtrim 不会删除您在第二个参数中指定的字符
  • x86-64 汇编的性能优化 - 对齐和分支预测

    我目前正在编写一些 C99 标准库字符串函数的高度优化版本 例如strlen memset 等 使用带有 SSE 2 指令的 x86 64 汇编 到目前为止 我已经在性能方面取得了出色的结果 但当我尝试进一步优化时 有时会出现奇怪的行为 例
  • Shapeless 中 Nat 类型的限制

    在无形中 Nat 类型代表了一种在类型级别对自然数进行编码的方法 例如 这用于固定大小的列表 您甚至可以在类型级别上进行计算 例如附加一个列表N列表中的元素K元素并返回一个在编译时已知的列表N K元素 Is this representat