Monad 类型签名示例

cur*_*eux 2 monads haskell type-signature

(+) 的类型签名是:

    (+) :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

我可以在:

    + 4 5
Run Code Online (Sandbox Code Playgroud)

结果是 9. + 需要 4 并返回一个大致的函数:

    (4 + a) -> a
Run Code Online (Sandbox Code Playgroud)

...然后取 5 并计算为 9。基本上,两件事情,一件事情出来。我没有看到使用绑定运算符的类型签名是如何工作的。对我来说,在实践中,它看起来总是一进一出。

有人可以像我上面为 (+) 所做的那样使用 Maybe monad 引导我完成一个简单的例子吗?希望这对像我这样的 Haskell 新手通常有用!

Gab*_*lez 5

这是 bind 的类型签名:

(>>=)
    :: Monad m
    => m a         -- Left argument
    -> (a -> m b)  -- Right argument
    -> m b
Run Code Online (Sandbox Code Playgroud)

下面是一个带有两个参数的绑定示例:

Just 1 >>= (\n -> Just (n + 1))
^^^^^^     ^^^^^^^^^^^^^^^^^^^^
Arg #1     Arg #2
Run Code Online (Sandbox Code Playgroud)

.. 它评估为 Just 2

  • 对于 `Maybe`,`return` 与 `Just` 相同。函数`\n -> return (n + 1)` 的作用与 Gabriel 示例中的 lambda 函数完全相同,但它适用于任何 monad。 (2认同)