+ val (hasLib, fnames) = foldl (fn (fname, (hasLib, fnames)) =>
+ if OS.Path.file fname = "lib.dtl" then
+ (SOME fname, fnames)
+ else
+ (hasLib, fname :: fnames))
+ (NONE, []) fnames
+
+ val fnames = rev fnames
+ val fnames = case hasLib of
+ NONE => fnames
+ | SOME hasLib => hasLib :: fnames
+ in
+ (providers, fnames)
+ 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)