
Hello,
data LSet t where Nil :: LSet Nil --either add the new element or do nothing Ins :: (Member a t b , If b (LSet t) (LSet (a ::: t)) r) => L a -> LSet t -> r
The constructor Ins needs to return an LSet. Maybe try replacing occurrences of r with (LSet r).
I expected that r would be an LSet, as its the output of If which returns its 2nd or 3rd argument:
class If p x y z | p x y -> z where if' :: p -> x -> y -> z instance If T x y x instance If F x y y
Type classes are open so there is nothing to prevent you from adding another instance for If, perhaps in a different module, which returns some arbitrary type. -Jeff --- This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.