Xin hãy giúp tôi hiểu được định nghĩa sau đây:Haskell Newtype cú pháp
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')
Tại sao runWriter được khai báo là
runWriter :: (a,w)
khi loại thực tế của nó là:
runWriter :: Writer w a -> (a, w)
Khi tôi đã thử với ghci Tôi nhận ra điều này phải là một số đối số ngầm định vì loại "a" phải được xác định, nhưng chính xác những gì đang xảy ra ở đây?