val dt = (TError, ErrorMsg.dummyLoc)
-fun expNeeded G (e, _) =
+fun expNeeded G (e, loc) =
case e of
EInt _ => ((SS.empty,
if Env.lookupType G "int" then
| SOME t => unionCTE ((typNeeded G t, SS.empty),
expNeeded G' e)
end
+ | EALam (x, p, e) =>
+ let
+ val G' = Env.bindVal G (x, (TAction (p, StringMap.empty, StringMap.empty), loc), NONE)
+ in
+ unionCTE (((predNeeded G p, SS.empty), SS.empty),
+ expNeeded G' e)
+ end
| EVar x =>
(case Env.lookupVal G x of
NONE => ((SS.empty, SS.empty), SS.singleton x)
fun order fnames =
let
- fun doFile fname =
- let
- val file = Parse.parse fname
- val (provide, require) = fileSig file
- in
- print "\nFile ";
- print fname;
- print "\nPROVIDE:\n";
- printSig provide;
- print "\nREQUIRE:\n";
- printSig require
- end
-
fun doFile (fname, (provideC, provideT, provideV, require)) =
let
val file = Parse.parse fname
SS.app (fn fname' => (print " "; print fname')) requires;
print "\n")) require;*)
- loop (ready, waiting, [])
+ ({provideC = provideC,
+ provideT = provideT,
+ provideV = provideV},
+ loop (ready, waiting, []))
end
+type providers = {provideC : string SM.map,
+ provideT : string SM.map,
+ provideV : string SM.map}
+
+fun providesContext (p : providers, s) = SM.find (#provideC p, s)
+fun providesType (p : providers, s) = SM.find (#provideT p, s)
+fun providesValue (p : providers, s) = SM.find (#provideV p, s)
+
end