在标准 ML 中包装数据类型

Wrapping Datatypes in Standard ML

此问题是此处发布的问题的后续问题:

我 运行 遇到的问题是我似乎无法弄清楚如何正确地将附加节点正确地包装在 NonNil 中。我的代码是:

fun alistAppend (xs: 'a alist, ys: 'a alist): 'a alist = 
    case xs of
    Nil => ys
   | _ =>  NonNil (Append (xs,ys));

我知道这段代码可能无法正确附加,我只是想弄清楚如何为该函数获取正确的 return 类型。包装附加节点的正确方法是什么?

能够通过创建一个新的 val 来解决这个问题:

val paired = (xs ,ys); 

我能够同时检查 xs 和 ys 的值。只需检查 xs 和 ys 是否均为 NonNil,然后在 NotNil 节点内创建适当的追加节点。