Haskell中的文字

Lia*_*gyu 9 haskell

据我所知,->有种*->*->*,((->) 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委员会决定跳过它.

  • 类型为lambdas的类型推断对于Miller的模式片段是可判定的,其中包括我们对当前Haskell类型构造函数的所有内容.我认为最好说我们在Haskell中没有类型lambda,因为它没有太多需要它,并且依赖类型直到最近才成为实验设计空间. (2认同)