据我所知,->有种*->*->*,((->) r)有种*->*.
假设有一种类型(a->b->c),有没有办法表示(a->b->)?
我试过,((->) a ((->) b))但这是错误的.
我试过了:
type Kab a b c = (a -> b -> c) -- it is ok
Run Code Online (Sandbox Code Playgroud)
但它无法使用Kab实例声明:
instance KClass (Kab a b) where -- error
Run Code Online (Sandbox Code Playgroud)
我发现作品的唯一方法是声明data:
data Kab a b c = Kab (a -> b -> c)
instance KClass (Kab a b) where ..
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用数据,我必须解开Kab,而我的想法是在本机函数类型上实现KClass.
那怎么办呢?
Dan*_*ner 10
不幸的是,它无法完成.
人们可能希望"类型级lambdas"(让我们写出来/\); 然后你就可以写了forall a b. /\c. a -> b -> c来表示这个.这将是一个非常方便的功能,并且已经对类型系统进行了大量研究,但是您付出的代价是类型推断变得不可判定.所以Haskell委员会决定跳过它.