it should be the case that partial application of foo is always non-expansive, right? It's really annoying that partial applications of auto-curried functions often can't be given general types.> fun foo (k : int -> 'a) (x : int) = ...;
I hate when the type system interferes with standard, semantics-preserving transformations.> val raisek (x : int) = raise (Fail (Int.toString x));
> val fooRaise = foo raisek;
Warning: type vars not generalized because of value restriction...