【发布时间】:2020-04-16 02:18:48
【问题描述】:
我做了一个函数如下:
pen :: (a -> b) -> (b -> a) -> (b -> b) -> a -> a
pen conv rev app = rev . app . conv
具体用法如下:
pen read show (\x -> x + 1) "5"
"6"
我对 Haskell 很陌生,我想知道 Haskell 标准库中是否存在这样的函数以及它的名称,因为我在 Hoogle 上找不到它。
我还假设有某种方法可以在没有 (a -> b) -> (b -> a) -> ... 并且只有一个双射函数的情况下实现这一目标,但我也不确定如何做到这一点。
干杯!
【问题讨论】:
-
是的,
read和show周围的括号不需要。不过,您的另一个问题是题外话。 -
你可以写
pen read show (\x -> x + 1)。该空间用于调用函数。 -
啊,那只是我是个白痴,我已经编辑了问题以提出主要问题。谢谢。
-
这是
Profunctorialdimap,它在理论上很重要,但不在标准库中。 -
@HTNW 我认为
dimap非常好,即使profunctors是第三方,也值得做出回答。
标签: haskell