为什么我没有因为使用“它”而得到 (Num (m0 b0)) 的实例

Why Am I Getting No instance for (Num (m0 b0)) arising from a use of ‘it’

我正在阅读“What I Wish I Know When Learning Haskell”,第 72 页上有这样一句话:

The first law is that when return a is passed through (>>=) into a function f, this expression is exactly equivalent to f.

所以我正在尝试这样做:

return 3 >>= (+ 1)

然后我得到

    No instance for (Num (m0 b0)) arising from a use of ‘it’
    In a stmt of an interactive GHCi command: print it

我做错了什么?

return 3 >>= (+1)等价于3+1,但是3+1的类型应该是Monad m => m a(>>=) :: Monad m => m a -> (a -> m b) -> m b要求右操作数是a接受 a 和 returns 和 m b 的函数。因此,它寻找一种方法将其视为 Number,但这没有多大意义。

例如,您可以使用 print :: Show a => a -> IO () 来打印结果,因此:

return 3 >>= <strong>print</strong> . (+1)