Sml ML中的多态列表

Sml ML中的多态列表,sml,smlnj,Sml,Smlnj,我在ML中有一段代码: local fun unfolder( [] , n ) = [] | unfolder( l::ls, n ) = (n, l) :: unfolder( ls, n ) in fun flat list = unfolder(list, 1) end; 这给了我一个错误: unexpected exception (bug?) in SML/NJ: EA [EA] raised at: ../../MLRISC/x86/mltree/x86.

我在ML中有一段代码:

local

fun unfolder( [] , n ) = []
    | unfolder( l::ls, n ) = (n, l) :: unfolder( ls, n )

in

fun flat list = unfolder(list, 1)  

end;
这给了我一个错误:

unexpected exception (bug?) in SML/NJ: EA [EA]
  raised at: ../../MLRISC/x86/mltree/x86.sml:417.32-417.34
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/Basics/stats/stats.sml:198.40
             ../compiler/TopLevel/interact/evalloop.sml:44.55

但是当我把它的(n,l)改成(n,l:int)时它就工作了,当我把它改成
(n,l:a)
时,有人能解释一下多态类型为什么不工作吗。如果使用MLton编译,该程序将完美运行,并添加:

val _ =
  let val l = flat [1,2,3]
      fun printer (a,b) = Int.toString(a) ^ ", " ^ Int.toString(b)
  in
    print (printer (hd l) ^ "\n")
  end
报告它。您的示例在大小上似乎易于理解,并且可能与多态性表示有关