作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以最初我写道:
xs <- getAddrInfo (Just hints) (Just addr) (Just port)
map_arg g f a b c = f (g a) (g b) (g c)
xs <- map_arg Just getAddrInfo hints addr port
最佳答案
最通用的类型签名看起来像
map_arg :: (forall b.b -> a b) -> (a b -> a c -> a d -> e) -> b -> c -> d -> e
map_arg g f a b c = f (g a) (g b) (g c)
g
作为参数,则可以执行
map_just f a b c = f (g a) (g b) (g c) where g = Just
xs <- map_just getAddrInfo hints addr port
g
类型签名:
map_arg (g :: forall b.b -> a b) f a b c = f (g a) (g b) (g c)
Control.Functor.Pointed
以便您可以使用它:
map_arg :: Pointed p => (p a -> p b -> p c -> d) -> a -> b -> c -> d
map_arg f a b c = f (point a) (point b) (point c)
Pointed
的
Maybe
实现就是你想要的
Just
)
map1 :: Pointed p => (p a -> b) -> a -> b
map1 f = f . point
map2 :: Pointed p => (p a -> p b -> c) -> a -> b -> c
map2 f = map1 . map1 f
map3 :: Pointed p => (p a -> p b -> p c -> d) -> a -> b -> c -> d
map3 f = map2 . map1 f
map1
而其他所有只是简单的组合!
关于haskell - 如何在 Haskell 中将函数映射到另一个函数的参数上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19533599/
我是一名优秀的程序员,十分优秀!