Hello all,

I'm trying to port typeclasses to kind-level, here are my data types:
-- newtype Fix f a = Fix (f (Fix f a))
-- data Mu f = In (f (Mu f))
data Fix (f :: k1 -> k0) (n :: k1) = Fx

data Maybe a = Nothing | Just a

If I try to create type families to represent Functors, I end up with this:

-- type family MapFix (f :: (* -> k) -> * -> k) a :: * where
-- type family MapFix f a where
type family MapFix (f :: (k0 -> k1) -> k0 -> k1) (a :: k2) :: * where
  MapFix f (Fix a n) = Fix (f a) (MapFix f n)

-- type family MapMaybe (f :: k -> k) (a :: Maybe k) :: Maybe k where
-- type family MapMaybe f a where
type family MapMaybe (f :: k0 -> k1) (a :: Maybe k0) :: Maybe k1 where
  MapMaybe f ('Just a) = 'Just (f a)
  MapMaybe f 'Nothing = 'Nothing

But I can't defined a single open type family for these two data types.
I think I lack of parametric kinds, for example: `k p` could let me fit `Maybe k`. Currently, in the way I see kinds, on `k0 -> k1` allow me to parameterize kinds, but `Maybe k` doesn't fit.

I know that this is certainly unclear, don't hesitate to ask me for clarifications.
I also know that my  `Fix` sucks, any good idea on how to do it is welcome :)
Also, if you have any links to have a deeper insight of Kinds it will save me from mental illness.

Thanks in advance for your help,
Regards.