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 次 |
| 最近记录: |