Haskell 使用函数a→;b如;一元的;函数a→;文学硕士

Haskell 使用函数a→;b如;一元的;函数a→;文学硕士,haskell,monads,function-composition,pointfree,Haskell,Monads,Function Composition,Pointfree,我目前正在使用Haskell basics,偶然发现了以下“用例”: ghci>让x除以x | x==0=Nothing |否则=Just(10/x) ghci>let composed=divideTenBy=composed 没有什么 ghci>仅10>>=合成 刚好(-0.5) 所以我基本上把一元函数和纯函数混合在一起,把它们组合成一元函数。这是可行的,但是返回。(*10)在我看来似乎是一个普遍需要的东西,所以我很想为它定义一个速记,比如monadify=(return.) 在我这么做之

我目前正在使用Haskell basics,偶然发现了以下“用例”:

ghci>让x除以x | x==0=Nothing |否则=Just(10/x)
ghci>let composed=divideTenBy=composed
没有什么
ghci>仅10>>=合成
刚好(-0.5)
所以我基本上把一元函数和纯函数混合在一起,把它们组合成一元函数。这是可行的,但是
返回。(*10)
在我看来似乎是一个普遍需要的东西,所以我很想为它定义一个速记,比如
monadify=(return.)


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

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

composed = divideTenBy . (*10) <=< divideTenBy . (-)5

composite=divideTenBy。(*10)我很惊讶我没有想到这一点,事实上这很明显:)我想这很好地回答了这个问题,谢谢!还要注意
mu>>>=return。f==liftM f mu==fmap f mu
(后者需要一个
函子
实例,但所有体面的
单子
都有一个)。正如Daniel Wagner的回答所示,
return。f>=>foo===foo。f
。在
(>=>)
的另一个参数位置,
foo>=>返回。f==fmap f。foo
@Daniel:很好,谢谢你提供的信息!
composed = divideTenBy . (*10) <=< divideTenBy . (-)5