我知道标题有点不清晰,问题是:
假设我有一个类型为
所以问题归结为将
假设我有一个类型为
a -> c
的函数,另一个类型为 b -> d
的函数,如何获得一个类型为 (a -> b) -> (c -> d)
的函数,或者这在一般情况下是否不可能?
也许我应该提供一些背景信息。我之所以提出这个问题,是因为我在解决幽灵类型的乐趣论文中的第9个练习时遇到了困难。
data Type t where
...
RFun :: Type a -> Type b -> Type (a -> b)
而且tequal
函数
tequal :: Type t -> Type u -> Maybe (t -> u)
...
tequal (RFun a b) (RFun c d) = -- should do something with (tequal a c) (tequal b d)
所以问题归结为将
a -> c
和 b -> d
组合成 (a -> b) -> (c -> d)
。
(a -> b)
吗? - m0nhawk