моя функция перестановки:
fun perms [] = [[]]
| perms (x::xs) = let
fun insertEverywhere [] = [[x]]
| insertEverywhere (y::ys) = let
fun consY list = y::list
in
(x::y::ys) :: (map consY (insertEverywhere ys))
end
in
List.concat (map insertEverywhere (perms xs))
end;
ввод:
perms [];
Выход:
stdIn:813.1-813.9 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val it = [[]] : ?.X1 list list
Может кто-нибудь объяснить, почему переменные типа не обобщены?
Следует отметить, что тип перми указывается после ввода перми; а
perms;
val it = fn : 'a list -> 'a list list
Так что, похоже, я достиг обобщенных переменных, по крайней мере для меня.