Я получаю то, что кажется проблемой приоритета при вызове функции SML, замените:
fun substitute v new (typevar q) = ...
И я вызываю это из другой функции:
fun new_type_vars (typevar v) non_gens =
substitute v new_var() (typevar v)
Но я получаю ошибку:
C:/sml/type_checker.sml:22.48-23.44 Error: operator and operand don't agree [tycon mismatch]
operator domain: type_exp
operand: unit -> string
in expression:
(substitute v) new_var
Что, по-видимому, предполагает, что он пытается вызвать (заменить v), а затем вызвать результат этого вызова с аргументом new_var.
Я пытался добавить круглые скобки вокруг всего этого, но это не помогает, и когда я добавляю круглые скобки вокруг аргументов, таких как (v new_var...)
, он думает, что v является приложением-функцией в new_var. Что происходит с этим вызовом функции?