[英]Tacit function composition in Haskell
說我有一個mean
函數定義如下:
mean xs = sum xs / (fromIntegral $ length xs)
但我希望以某種默認形式使用,例如:
mean = sum / (fromIntegral . length)
是否有內置的Haskell方法可以按照這些思路執行某些操作而不必建立我自己的tacit
函數(類似這樣):
tacit :: (a -> b -> c) -> (d -> a) -> (d -> b) -> d -> c
tacit a b c i = a (b i) (c i)
這種形式的函數如下所示:
mean = tacit (/) sum (fromIntegral . length)
但是感覺好像有一種方法可以避免使用諸如此類的顯式函數。 我是在想; 有什么方法可以內置在Haskell中嗎?
適用函子在這里可以很好地工作。
import Control.Applicative
mean = (/) <$> sum <*> (fromIntegral . length)
是的,你的tacit
功能liftM2
在(->) r
單子( liftM2
是Control.Monad
,和單子的功能情況是Control.Monad.Instances
)。
我使用pointfree
程序(可以通過cabal install pointfree
進行cabal install pointfree
)找到了它,調用方式為:
$ pointfree '\xs -> sum xs / (fromIntegral $ length xs)'
(在Unix終端中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.