次の定義を理解するのを手伝ってください。
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」を決定する必要があるため、これは暗黙の引数に違いないことに気付きましたが、ここで正確に何が起こっているのでしょうか?