> > module type IHelloWorld = > > sig > > type helloWorldType = Hello | World > > val hello : unit -> helloWorldType > > end > > > > module Wrapper (X: IHelloWorld) : IHelloWorld = > > struct > > type helloWorldType = X.helloWorldType > > let hello = X.hello > > end > > You have to explicitely define Hello and World in the wrapper. Try this : > > module Wrapper(X:IHelloWorld): IHelloWorld = > struct > type helloWorldType = X.helloWorldType = Hello | Word > let hello = X.hello > end Alternatively, you have defined too much In IHelloWorld (depends on what you wanted to do in the first place). Then try this: module type IHelloWorld = sig type helloWorldType (* now abstract *) val hello : unit -> helloWorldType end module Wrapper (X: IHelloWorld) : (IHelloWorld with type helloWorldType = X.helloWorldType) = struct type helloWorldType = X.helloWorldType let hello = X.hello end ... Sebastian Egner.