使用函数a→b作为"monadic"函数a→mb

Nik*_* B. 5 monads haskell pointfree function-composition

我目前正在玩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)
Run Code Online (Sandbox Code Playgroud)

所以我基本上将monadic和pure函数混合在一起,并将它们组合成一个monadic函数.这很有效,但在return . (*10)我看来,这似乎是一个常用的东西,所以我很想为它定义一个速记,比如说monadify = (return.).

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

Dan*_*ner 7

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

composed = divideTenBy . (*10) <=< divideTenBy . (-)5
Run Code Online (Sandbox Code Playgroud)