ML中的多态列表

时间:2010-12-17 13:33:18

标签: 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.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

但是当我更改its (n, l) to (n, l:int)时它会起作用,何时更改为(n, l:'a),有人可以解释为什么多态类型不起作用,提前感谢

1 个答案:

答案 0 :(得分:2)

这是SML / NJ中的内部错误。如果使用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

报告。你的例子看起来很容易消化 - 可能与多态表示有关。