最近Haskellの勉強を初めて,適当にライブラリを読んでいるのですが,type演算子の用途について疑問があります.

例えば,以下の例ですと右辺がなく,何のシノニムになっているのか分かりません.

https://github.com/RaphaelJ/friday/blob/master/src/Vision/Image/Class.hs#L93

class Storable (ImagePixel i) => MaskedImage i where
    type ImagePixel i

また,以下の例では,左辺 ImagePixel (Manifest p) のほうが,右辺 p よりも複雑になっていて,
シノニムを使う理由がよく分かりません.

https://github.com/RaphaelJ/friday/blob/master/src/Vision/Image/Type.hs#L52

instance Storable p => MaskedImage (Manifest p) where
    type ImagePixel (Manifest p) = p

type演算子には,型シノニム以外の使い方があるのでしょうか?