> class OneStep a > data OS a :: * > instance OneStep (Cons v t) > data OS (Cons v t) = t > > class TwoStep a > data TS a :: * > instance (OneStep a, OneStep b) => TwoStep a instance (OneStep a, OneStep (OS a)) => TwoStep a ? Cheers, Andres