view tests/functor.ur @ 1083:2eb585274501

Stop skipping Especialization of generated functions; fix Compiler.parseUrp; expose uw_really_write(); allow more NULL arguments to uw_register_transactional()
author Adam Chlipala <adamc@hcoop.net>
date Wed, 23 Dec 2009 12:25:34 -0500
parents 71bafe66dbe1
children
line wrap: on
line source
signature S = sig
        type t
        val z : t
        val s : t -> t
end

signature T = sig
        type t
        val three : t
end

functor F (M : S) : T where type t = M.t = struct
        type t = M.t
        val three = M.s (M.s (M.s M.z))
end


structure O = F (struct
        type t = int
        val z = 0
        val s = fn x : t => x
end)
val three : int = O.three

structure S = struct
        type t = int
        val z = 0
        val s = fn x : t => x
end
structure SO = F (S)
val three : int = SO.three

structure SS : S = S
structure SSO = F (SS)
val three : SS.t = SSO.three

val main = three