私は現在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
(プッシュの場合は、空のスタックの一致を使用する必要があります)。
これを達成する方法はありますか?