我想解释一下以下组合是如何工作的:
(=<<) . return
where
(=<<) :: (a -> m b) -> m a -> m b
return :: a -> m a
(.) :: (b -> c) -> (a -> b) -> a -> c
最终类型:
GHCi> :t (=<<) . return
(=<<) . return :: Monad m => m b -> m a -> m b
我无法理解如何将m a与(a -> m b)匹配,即如何将return的结果应用于期望函数类型的(=<<)的第一个参数?
(=<<) . return :: (Monad ((->) a), Monad m) => m b -> m a -> m b
是一个更完整的类型签名,它明确地显示了函数实例。 - Saraha0 -> m0 b0'与实际类型
Maybe a1'*。 - David Unricreturn
在这里是const
的同义词。它的意义由其属于((->) a)单子确定。(=<<) . return === flip (>>)
。因此,你上面评论中Just
和1
的使用都是错误的。必须使用const
代替Just
,并且必须使用一些单子值代替1
,例如(=<<) (const [1]) "xyz"
会产生[1,1,1]
。 - Will Ness