如果这个问题听起来很傻,请原谅,我还是学习Haskell的初学者。
给定绑定运算符函数签名:
(>>=) :: m a -> (a -> m b) -> m b
我的问题是;a";值从";m a";以便函数CCD_ 1可以被激发?haskell内部对此进行了抽象吗?
这是由编写特定类型的Monad
实例的人员实现的。
例如,如果我们查看Maybe
的Monad
的instance
,我们会看到[src]:
-- | @since 2.01 instance Monad Maybe where (Just x) >>= k = k x Nothing >>= _ = Nothing (>>) = (*>)
而对于列表[src]的一个实例,我们看到:
-- See Note: [List comprehensions and inlining] -- | @since 2.01 instance Monad [] where {-# INLINE (>>=) #-} xs >>= f = [y | x <- xs, y <- f x] {-# INLINE (>>) #-} (>>) = (*>)
如果您因此使某个东西成为Monad
类型类的实例,则需要提供(>>=)
函数的实现。