-
Functions whose only uses are recursive uses within their bodies are not warned as unused:
local fun foo () = foo () : unit val bar = let fun baz () = baz () : unit in baz end in end
Warning: z.sml 3.5. Unused variable: bar.
-
Components of actual functor argument that are necessary to match the functor argument signature but are unused in the body of the functor are warned as unused:
functor Warning (type t val x : t) = struct val y = x end structure X = Warning (type t = int val x = 1)
Warning: z.sml 4.29. Unused type: t.
-
No component of a functor result is warned as unused. In the following, the only uses of f2 are to match the functor argument signatures of functor G and functor H and there are no uses of z:
functor F(structure X : sig type t end) = struct type t = X.t fun f1 (_ : X.t) = () fun f2 (_ : X.t) = () val z = () end functor G(structure Y : sig type t val f1 : t -> unit val f2 : t -> unit val z : unit end) = struct fun g (x : Y.t) = Y.f1 x end functor H(structure Y : sig type t val f1 : t -> unit val f2 : t -> unit val z : unit end) = struct fun h (x : Y.t) = Y.f1 x end functor Z() = struct structure S = F(structure X = struct type t = unit end) structure SG = G(structure Y = S) structure SH = H(structure Y = S) end structure U = Z() val _ = U.SG.g () val _ = U.SH.h ()