Wibble...
The corrected example is as follows:
myS :: (forall t t1 t2. (t -> t2 -> t1) -> (t -> t2) -> t -> t1)
[NoDiscard] __AL 3
myS
= \ @ t @ t1 @ t2 f :: (t -> t2 -> t1) g :: (t -> t2) x :: t -> f x (g x)
public class myS implements Code {
public Object ENTER () {
VM.COLLECT(3, this);
final Object f = VM.POP();
final Object g = VM.POP();
final Object x = VM.POP();
VM.PUSH(x);
VM.PUSH(new Thunk(new myS$1(g, x)));
return f;
}
}
class myS$1 extends Code {
final Object g;
final Object x;
public myS$1 (Object _g_, Object _x_) {
g = _g_;
x = _x_;
}
public Object ENTER () {
VM.PUSH(x);
return g;
}
}
new env typ [] (Just inner) =
-- anon. inner class
do { innerName <- genAnonInnerClassName
- ; frees <- liftClass env innerName inner [] []
- ; return (mkNew env typ [ Var name | name <- frees ])
+ ; frees <- liftClass env innerName inner [unType typ] []
+ ; return (New (Type [innerName]) [ Var name | name <- frees ] Nothing)
}
+ where unType (Type [name]) = name
+ unType _ = error "incorrect type style"
+
new env typ _ (Just inner) = error "cant handle inner class with args"
liftClass :: Env -> Name -> [Decl] -> [Name] -> [Name] -> LifterM [ Name ]