这里的第一个问题,只是想作为序言,我做了几个查询,虽然我发现了多个问题类似的措辞,我发现没有人提出或回答我的问题(据我所知) .
我在SML工作,因为我要留下一些细节,所以我可以自己解决这个问题 . 我在SML中定义了以下类型:
- type Env = string -> int;
本质上,Env类型应该是一个允许从字符串映射到int的函数 - 这是一个简单的环境方案 . 创造一个能够做到这一点的功能,即:
- fun foo (s:string) = 10; (*simple example*)
但有没有办法将此函数声明为"Env type"?原因是我最终需要创建一个函数,其返回值是一个Env类型的函数,我不知道如何执行它 . 我知道SML允许类型别名,我认为这意味着技术上任何具有类型 string -> int
的函数都将与程序的Env类型同义,但我想要更明确的东西 .
如果需要澄清,请询问,我会尝试更简洁 .
3 回答
使用
fun
时,可以通过在所有参数模式之后放置类型注释: Env
来指定返回类型为Env
;例如:您可以使用
val
绑定而不是fun
声明来使SML明确地将类型与函数关联 . 这样的两步过程:或者您可以使用匿名函数:
我不确定是否可以使用
fun
关键字直接执行此操作 . 例如,以下操作失败:有点神秘的消息
Error: illegal function symbol in clause
也许还有其他一些我不熟悉的解决方法
由于
Env
只是一个类型别名(使用type Env = ...
而不是例如datatype Env = ...
或abstype Env = ...
创建),因此创建返回Env
的函数与创建返回字符串→int函数的函数完全相同 .以下是对您的问题的两种解释:
有几种方法,它实际上取决于它应该做什么 . 但是一些例子可能是:
datatype Env = ...
:abstype Env = ...
: