pattern-matching - SML/NJ 中的模式匹配空 Fifo.fifo
问题描述
当我尝试写类似的东西时
fun test Fifo.empty = true
| test _ = false`
我收到一条错误消息,上面写着Error: variable found where constructor is required: Fifo.empty
. 我对 SML/NJ 真的很陌生。原来它与Fifo.empty
成为一个longId有关,但我还没有想出如何解决这个问题,除了通过传递Fifo.isEmpty
作为参数来修补它,但这几乎不是一个解决方案......
解决方案
当您检查 Fifo 模块时,
- open Fifo;
[autoloading]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
opening Fifo
datatype 'a fifo = ...
exception Dequeue
val empty : 'a fifo
(* and so on *)
你可以看到这Fifo.empty
是一个'a fifo值。看看它是如何制作的,
- Fifo.empty;
val it = Q {front=[],rear=[]} : 'a fifo
不幸的是, 'a fifoQ
的数据类型构造函数被不透明的模块隐藏(因此定义显示为“ ”。当您定义数据类型时,它的构造函数(例如)成为值构造函数和模式构造函数,但是当您声明值时使用这样的值构造函数,它们也不会成为模式构造函数。datatype
...
Q
Fifo.empty
我还没有想出如何解决这个问题,除了通过
Fifo.isEmpty
作为参数传递来修补它,但这几乎不是一个解决方案......
我不确定您为什么需要Fifo.isEmpty
作为参数传入;你不能只Fifo.isEmpty
在函数体中引用吗?也许你没有解释这个问题的维度。
以下情况如何:
fun test queue = Fifo.isEmpty queue
或者简单地说:
val test = Fifo.isEmpty
一般来说,如果你想传入一堆库函数作为参数,你可以考虑构建一个高阶模块(函子),它将另一个模块作为参数。
推荐阅读
- flutter - Flutter Codemagic IOS 签名失败
- java - 在java中等待/睡眠直到特定时间(例如星期四10:59)
- apache-spark - Gradle:在不丢失传递依赖的情况下遮蔽番石榴
- domain-driven-design - 使用 Hexagonal Architecture 时添加专用端口有哪些缺点?
- android - TextView TextAllCaps 崩溃的应用程序
- python - pandas.to_datetime() 自动转换为
我有一个数据框,它被读取为包含格式为“YYYY-MM-DD”的日期的字符串。我已经使用 pd.to_datetime(带强制)将该列转换为日期时间,并且我打算使用 numpy.isnat() 在该列中搜索 NaT。
defaultDate = datetime.d
- sql - 如何通过检查同一表中另一条记录中的值来更新记录
- cmake - 我们如何使用 X-JFrog-Art-Api 下载 JFrog Artifacts?
- google-maps - 如何在 Shopify Atlantic 主题中将 Iframe 地图大小更改为全屏
- android - 如何通过按下它来更改按钮ID?