Haskell中的文字

时间:2015-05-16 03:34:37

标签: haskell

据我所知,->*->*->*种,而((->) r)有种*->*

假设有(a->b->c)类型,有没有办法代表(a->b->)

我尝试了((->) a ((->) b)),但错误。

我试过了:

type Kab a b c = (a -> b -> c) -- it is ok

但它未能在实例声明中使用Kab

instance KClass (Kab a b) where -- error

我发现作品的唯一方法是声明data

data Kab a b c = Kab (a -> b -> c)
instance KClass (Kab a b) where ..

但是如果我使用数据,我必须解开Kab,而我的想法是在本机函数类型上实现KClass。

那怎么办呢?

1 个答案:

答案 0 :(得分:10)

不幸的是,它无法完成。

人们可能希望“类型级lambdas”(让我们写出它们/\);那么你就可以写forall a b. /\c. a -> b -> c来表示这一点。这将是一个非常方便的功能,并且已经对类型系统进行了大量研究,但是您付出的代价是类型推断变得不可判定。所以Haskell委员会决定跳过它。