Próbuję zrozumieć wyjaśnieniu w Monads made difficult i mam twardy czas na zastanawianie się następującą definicję newtype:Haskell newtype z nawiasami
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
ja nigdzie nie widział wyjaśnieniu, co oznacza newtype z wyrazem w nawiasie zamiast deklaracji typu. Dlatego nie mogę zrozumieć, co oznacza definicja funkcji fmap. Nie rozumiem także, dlaczego nieokreślony akcesor pola jest zdefiniowany, ale nigdy nie jest używany. Czuję, że brakuje mi podstawowej semantyki nowości.
+1 za faktyczne testowanie. – Ingo
Jeden prawdopodobnie * chciałby * wyeksportować szczegóły implementacji, przynajmniej dlatego, że istnieje tylko jedna rzecz, którą mogą być. Czasami wygodniej jest korzystać z funkcji rozpakowywania niż dopasowywania wzorców. –