Dato:La fusione può vedere attraverso i wrapper newtype?
newtype MyVec = MyVec { unVec :: Data.Vector }
deriving (Functor, etc)
Questo creerà (qualcosa di simile) questo:
instance Functor MyVec where
fmap f = MyVec . Data.Vector.fmap f . unVec
Will Vettori regole di fusione del fuoco e riscrivere fmap f . fmap g $ myVec
in fmap (f . g) myVec
?
Ci sono delle insidie di cui dovrei essere a conoscenza? Afaik il problema in cui si "paga" per i nuovi tipi di contenitori è stato risolto in GHC 7.8, vero?
[Il wiki Haskell] (https://www.haskell.org/haskellwiki/Performance/Data_types#Newtypes) afferma che "' newtype's non costa nulla ". Non dovrebbe essere riformulato se è davvero il caso che impediscono alcune ottimizzazioni? – gallais
Se la definizione di 'map' non ha una chiamata a' MyVec' in essa, ad es. 'map f x = MyVec $ Vector.map f (unVec x) '? – ErikR
Prima domanda: come scoprire le regole di riscrittura pertinenti. Quando uso '-ddump-rule-firings' vedo migliaia di licenziamenti ... E se sono rilevanti? – fho