Haskell 使用函数a→;b如;一元的;函数a→;文学硕士
我目前正在使用Haskell basics,偶然发现了以下“用例”: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.) 在我这么做之
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