- etaExpand :: [Ty] -> Exp -> Exp
- etaExpand ts e =
- let args = [('$':(show i),t) | (i,t) <- zip [(1::Integer)..] ts] in
- foldr (\ (v,t) e -> Lam (Vb (v,t)) e)
- (foldl (\ e (v,_) -> App e (Var (unqual v))) e args)
- args
+ etaExpand :: [Kind] -> [Ty] -> Exp -> Exp
+ etaExpand ks ts e =
+ -- what a pain
+ let tyArgs = [("$t_"++(show i),k) | (i, k) <- zip [(1::Integer)..] ks]
+ termArgs = [ ('$':(show i),t) | (i,t) <- zip [(1::Integer)..] ts] in
+ foldr (\ (t1,k1) e -> Lam (Tb (t1,k1)) e)
+ (foldr (\ (v,t) e -> Lam (Vb (v,t)) e)
+ (foldl (\ e (v,_) -> App e (Var (unqual v)))
+ (foldl (\ e (tv,_) -> Appt e (Tvar tv))
+ e tyArgs)
+ termArgs) termArgs)
+ tyArgs