【发布时间】:2016-07-28 02:33:09
【问题描述】:
我有两个等效的 Haskell 函数。
triple :: Int -> Int
triple = do
n <- id
d <- (n+)
(d+)
triple2 :: Int -> Int
triple2 = (id >>= (\n -> (n+))) >>= (\d -> (d+))
>>=的签名是M a -> (a -> M b) -> M b,所以括号用来强调((Ma >>= f) >>= f2)或M b >> f2的关系。
不过,这个triple3 也是和triple 或triple2 等价的函数。
triple3 :: Int -> Int
triple3 = id >>= (\n -> (n+) >>= (\d -> (d+)))
这些等价背后的逻辑是什么?
【问题讨论】:
-
在没有任何问题的情况下投票否决问题有什么问题?我没想到会从 Haskell 标记的问题中看到这种怯懦。