I am trying to write two type instances that match only on the kind of of the type variable is this possible?
This is what I want to work
type LiftingWriter :: t -> *
type family LiftingWriter t
type instance LiftingWriter (t w m a :: Type) = LiftWriter t w m a
type instance LiftingWriter (t r w s m a :: Type) = LiftWriterRWS t r w s m a
type LiftWriter :: (* -> (* -> *) -> * -> *) -> * -> (* -> *) -> * -> *
newtype LiftWriter t w m a = LiftWriter {runLiftWriter :: t w m a}
type LiftWriterRWS :: (* -> * -> * -> (* -> *) -> * -> *) -> * -> * -> * -> (* -> *) -> * -> *
newtype LiftWriterRWS t r w s m a = LiftWriterRWS {runLiftWriterRWS :: t r w s m a}