Proszę mi pomóc zrozumieć następującą definicję:składnia newtype Haskell
newtype Writer w a = Writer { runWriter :: (a,w) }
instance (Monoid w) => Monad (Writer w) where
return a = Writer (a,mempty)
(Writer (a,w)) >>= f = let (a',w') = runWriter $ f a in Writer (a',w `mappend` w')
Dlaczego runWriter jest zadeklarowana jako
runWriter :: (a,w)
gdy jego rzeczywisty typ to:
runWriter :: Writer w a -> (a, w)
Raz próbowałem z ghci zdałem sobie sprawę, że musi to być jakiś ukryty argument, ponieważ typ "a" musi zostać określony, ale co dokładnie się tutaj dzieje?