Functional programming 如何在标准ML中的数据类型中指定类型约束?

Functional programming 如何在标准ML中的数据类型中指定类型约束?,functional-programming,sml,Functional Programming,Sml,在标准ML中考虑此数据类型: datatype 't options = Null | Some of 't 我还有另一种数据类型: datatype option = Apple | Orange | Melon 我想指定datatype options只接受datatype option作为其输入类型't。如何做到这一点?SML中没有这样的功能,也没有我听说过的任何SML方言的扩展 可以将更专门的版本定义为类型别名: type option_opti

在标准ML中考虑此数据类型:

datatype 't options = Null
                   | Some of 't
我还有另一种数据类型:

datatype option = Apple | Orange | Melon

我想指定
datatype options
只接受
datatype option
作为其输入类型
't
。如何做到这一点?

SML中没有这样的功能,也没有我听说过的任何SML方言的扩展

可以将更专门的版本定义为类型别名:

type option_options = option options

如果需要,您可以在模块签名中抽象该类型,但这将隐藏构造函数。

如何,使用自制选项:

strobel@suse132-intel:~> sml
Standard ML of New Jersey v110.79 [built: Tue Dec 22 21:53:32 2015]
- datatype fruits = Apple | Orange | Melon;
datatype fruits = Apple | Melon | Orange
- datatype fruitopt = Nofruit | Fruit of fruits;
datatype fruitopt = Fruit of fruits | Nofruit
- 

为什么不删除
't
并编写
数据类型options=Null |一些option
?@AlexeyRomanov:我知道我做得太过分了。对SML EH来说非常陌生。非常感谢,真的很有价值!我想最接近的是一个精化类型。