请帮助我理解了如下定义:哈斯克尔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”必须确定,但是到底发生了什么?