Dmi*_*tsa 1 haskell higher-order-functions
假设我们有两个类型的函数(a -> b -> c)
.我希望有一个单一的功能,其中,当应用于a
和b
将给予d
,从合并c
由一个特定的功能(c -> c -> d)
.我用箭头想出了这个解决方案:
combine :: (a -> b -> c) -> (a -> b -> c) -> (c -> c -> d) -> (a -> b -> d)
combine f g op = ((uncurry op) .) . (uncurry (&&&)) . (f &&& g)
Run Code Online (Sandbox Code Playgroud)
有没有办法以更优雅的方式做到这一点,或者将其概括为适用于更大的功能(例如(a -> b -> c -> d) -> (a -> b -> c -> d) -> (d -> d -> e) -> (a -> b -> c -> e)
)?
不要害怕明白.对我来说,这更容易阅读:
combine :: (a -> b -> c) -> (a -> b -> c) -> (c -> c -> d) -> (a -> b -> d)
combine f g op = \a b -> op (f a b) (g a b)
Run Code Online (Sandbox Code Playgroud)
对于更多的灵魂来说,看起来不是更丑陋:
combine3 f g op = \a b c -> op (f a b c) (g a b c)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
591 次 |
最近记录: |