gpt4 book ai didi

haskell - 将函数组合成另一个函数

转载 作者:行者123 更新时间:2023-12-02 18:31:28 25 4
gpt4 key购买 nike

标准库中是否有一个 Haskell 函数,它接受三个函数并返回一个函数,该函数将前两个函数的返回值应用于第三个函数,如下所示:

compact :: (a -> b) -> (a -> c) -> (b -> c -> d) -> a -> d
compact a b c = \x -> c (a x) (b x)

或者这个:

import Control.Arrow
compact' :: (a -> b) -> (a -> c) -> (b -> c -> d) -> a -> d
compact' a b c = uncurry c . (a &&& b)

这样:

compact (take 1) (drop 2) (++) [1,2,3,4] == [1,3,4]
compact (+10) (*2) (<) 11 == True
compact (+10) (*2) (<) 9 == False

最佳答案

如果您将签名重新排序为:

(b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d

这相当于 liftM2 ,自 ((->) r) is an instance of Monad type class

liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r

\> liftM2 (++) (take 1) (drop 2) [1, 2, 3, 4]
[1,3,4]
<小时/>

类似地,liftA2来自Control.Applicative:

liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c

\> liftA2 (++) (take 1) (drop 2) [1, 2, 3, 4]
[1,3,4]

关于haskell - 将函数组合成另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com