как мне назначить выражение со свободными переменными типа, как я назначаю другие функции f как val x = f: ??
У меня есть
fun curry f x y = f (x,y);
val dummy = fn (x,y) => {a=x,b=y} (* or anything with free type *)
val dummCd = fn x=> fn y=> {a=x,b=y}
Я думал, что "пустышка карри" будет работать как "dummCd", но,
dummCd
val it = fn: 'a -> 'b -> {a: 'a, b: 'b}
и
curry dummy:
stdIn:13.1-13.8 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val it = fn : ?.X1 -> ?.X2 -> {a:?.X1, b:?.X2}
Так что это становится бесполезным при назначении. Я могу сделать это:
fun x a b =curry dummy a b ;
но это немного неуклюже. Когда я помещаю то, что я делаю здесь, в функцию
val a = fn tr => (fn a=> fn b=> tr a b)
val x = a (curry dummy)
val x = fn : ?.X1 -> ?.X2 -> {a:?.X1, b:?.X2}
, я получаю ту же проблему обратно. Как я могу назначить «пустышку карри», не используя дополнительные a и b? Я имею в виду
val x = a ( curry dummy )
, где a может быть функцией, а x ведет себя как dummCd
Спасибо за советы