簡體   English   中英

Haskell中的默認功能組合

[英]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單子( liftM2Control.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM