моя функция перестановки:
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
Похоже, что я достиг обобщенных переменных, по крайней мере, для меня.