5

我目前正在玩 Haskell 基础知识,偶然发现了以下“用例”:

ghci> let divideTenBy x | x == 0 = Nothing | otherwise = Just (10 / x)
ghci> let composed = divideTenBy <=< return . (*10) <=< divideTenBy <=< return . (-)5
ghci> Just 5 >>= composed
Nothing
ghci> Just 10 >>= composed
Just (-0.5)

所以我基本上在这里混合了单子函数和纯函数并将它们组合成单子函数。这行得通,但在我看来,这return . (*10)似乎是一个常用的东西,所以我很想为它定义一个简写,比如monadify = (return.).

不过,在我这样做之前,我想问一下是否已经有帮助者来处理这种情况。当然,我也可能对整个事情感到困惑,并且有理由不应该这样做。如果是这样,请告诉我。

4

1 回答 1

7

没有理由不这样做。但是,很少有必要。例如,您的用例可以重写为

composed = divideTenBy . (*10) <=< divideTenBy . (-)5
于 2012-04-01T04:12:08.287 回答