As a couple of you noted, there was a problem with the assignment as handed out (my apologies). Corrections (which require changing two lines) have been made in ass4.html and ass4.sml. There is also a bug in SML of NJ which prevents the code to compile as given; a workaround is shown below. -------------------------------------------------- In Question 3, the instantiation of type intset was in the wrong place. Please change the signature to leave type intset uninstantiated: signature INTSET = sig type intset (* was: type intset = BoolSignal.signal *) val int : intset val nat : intset val empty : intset val union : intset * intset -> intset val intersect : intset * intset -> intset val difference : intset * intset -> intset val member : int * intset -> bool end; Instead, the result signature of the IntSet functor should show the intset implementation to allow a simple answer to question 5. functor IntSet (structure BS : BOOL_SIGNAL) :> INTSET where type intset = BS.signal (* was :> INTSET *) = struct type intset = BS.signal ... end; (* functor IntSet *) -------------------------------------------------- There is also a bug in SML of New Jersey which prevents the code as given to compile. To work around this bug occurrences of signature instantiations of the form where type t = t1 and s = s1 should be replaced by where type t = t1 where type s = s1 Both of these forms are correct, so I have replaced the former by the latter for the sake of those running SML/NJ. If you are running MLWorks, you may ignore this change.