Sto cercando di capire la spiegazione in Monads made difficult e ho difficoltà a capire la seguente definizione newtype:Haskell Newtype con parentesi
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
ho nulla visto una spiegazione di ciò che significa newtype con un'espressione tra parentesi al posto della dichiarazione del tipo. Pertanto non riesco a capire quale sia la definizione della funzione fmap. Inoltre, non capisco perché la funzione di accesso al campo unCompose sia definita ma mai utilizzata. Mi sento come se mi mancasse qualche semantica di base di newtype.
+1 per testarlo effettivamente. – Ingo
Uno probabilmente * vorrebbe * esportare i dettagli di implementazione, almeno in quanto c'è solo una cosa che potrebbero essere. A volte è più conveniente utilizzare una funzione di decompressione rispetto alla corrispondenza del modello. –