Я пытаюсь понять объяснение в Монады, сделанные трудными, и мне сложно определить следующее определение newtype:
newtype (FComp g f) x = FComp { unCompose :: g (f x) }
instance (Functor b c f, Functor a b g) => Functor a c (FComp g f) where
fmap f (FComp xs) = FComp $ fmap (fmap f) xs
Я нигде не видел объяснения того, что означает newtype с выражением в круглых скобках вместо объявления типа. Поэтому я не могу понять, что означает определение функции fmap. Я также не понимаю, почему атрибут доступа unCompose определен, но никогда не используется. Я чувствую, что мне не хватает базовой семантики нового типа.