異なるシグネチャを持つ関数の部分適用が機能するのはなぜですか?
例Control.Monad.join
として:
GHCi> :t (=<<)
(=<<) :: Monad m => (a -> m b) -> m a -> m b
GHCi> :t id
id :: a -> a
GHCi> :t (=<<) id
(=<<) id :: Monad m => m (m b) -> m b
それらは明らかに異なるので、なぜそれは議論id :: a -> a
の代わりに受け入れるのですか?(a -> m b)