Пожалуйста, помогите мне понять следующее определение:Haskell синтаксис Newtype
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')
Почему runWriter объявлен как
runWriter :: (a,w)
, когда его фактический тип:
runWriter :: Writer w a -> (a, w)
После ввода попробовал с ghci. Я понял, что это должен быть какой-то неявный аргумент, так как нужно определить тип «а», но что здесь происходит?