我目前在學習SML,並且對於我沒有名字的東西有疑問。現在讓我們稱之爲「輸入別名」。假設我有以下數據類型定義:SML中的類型推斷
datatype 'a stack = Stack of 'a list;
我現在想添加一個明確的「空棧」類型。我可以這樣將它添加到數據類型:
datatype 'a stack = emptystack | Stack of 'a list;
現在我可以匹配模式像「推送」功能:
fun push (emptystack) (e:'a) = Stack([e])
| push (Stack(list):'a stack) (e:'a) = Stack(e::list);
這裏的問題是,Stack([])
和emptystack
是不同的,但我想他們是一樣的。因此,每當SML遇到Stack([])
時,它應該「知道」這是emptystack
(在推送的情況下它應該使用空堆匹配)。
有沒有辦法做到這一點?
只是爲了記錄,它被稱爲*推理*,而不是*干擾*。 SML編譯器*推斷*表達式的類型。它不*干擾* :) – jalf
這引發了一個問題:*爲什麼*你甚至想要這樣做?第二版「棧」比第一版更受歡迎?通常,人們想要刪除多餘的案例,而不是引入它們。 –