Я пытаюсь понять объяснения в Monads made difficult и у меня трудно понять, следующее определение NewType:Haskell 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 определен, но никогда не используется. Я чувствую, что мне не хватает базовой семантики нового типа.
+1 для фактического тестирования. – Ingo
Возможно, что * хотел бы экспортировать детали реализации, по крайней мере, поскольку есть только одно, что они могут быть. Иногда удобнее использовать функцию распаковки, чем сопоставление шаблонов. –