2016-04-25 88 views
3

考慮這個數據類型在標準-ML:如何在Standard-ML中的數據類型中指定類型約束?

datatype 't options = Null 
        | Some of 't 

而且我也有這等數據類型:

datatype option = Apple | Orange | Melon 

我想指定datatype options應該只接受datatype option作爲其輸入型't。這個怎麼做?

+5

爲什麼不刪除''t'寫'數據類型選項= NULL |一些選項? –

+0

@AlexeyRomanov:我知道我過分的東西。 SML eheh很新穎。非常感謝,真的很有價值! – Andry

回答

5

在SML中沒有這樣的功能,也沒有任何我聽說過的SML方言的擴展。

可以定義一個更爲特殊的版本作爲一個類型別名:

type option_options = option options 

而且你可以在模塊的簽名式的抽象,如果你想要的,但是,將隱藏的構造函數。

+0

我想最接近的是[F *](https://www.fstar-lang.org/)中的改進類型。 –

0

這個怎麼樣,用自制的選項:

[email protected]:~> 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 
-