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

Jam*_*ter 3 haskell ghc

我正在阅读《学习 Haskell 时我希望知道什么》,第 72 页上有这样一句话:

\n
\n

第一定律是,当return a传递(>>=)给函数时f,该表达式完全等价于f

\n
\n

所以我正在尝试这样做:

\n
return 3 >>= (+ 1)\n
Run Code Online (Sandbox Code Playgroud)\n

我得到

\n
    No instance for (Num (m0 b0)) arising from a use of \xe2\x80\x98it\xe2\x80\x99\n    In a stmt of an interactive GHCi command: print it\n
Run Code Online (Sandbox Code Playgroud)\n

我究竟做错了什么?

\n

Wil*_*sem 5

相当于return 3 >>= (+1)3+1但 的类型3+1应该是 a Monad m => m a(>>=) :: Monad m => m a -> (a -> m b) -> m b要求正确的操作数是一个接受 ana并返回 an 的函数m b。因此,它寻找一种方法将其视为Number,但这没有多大意义。

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

return 3 >>= print . (+1)
Run Code Online (Sandbox Code Playgroud)