請幫助我理解了如下定義:哈斯克爾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試過我意識到這肯定是一些隱含的論點,因爲類型「a」必須確定,但是到底發生了什麼?