模块GHC/Base.hs包含以下运算符定义:
($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
f $ x = f x
Run Code Online (Sandbox Code Playgroud)
r意思?(a -> b) -> a -> b笼统吗?TYPE?TYPE提供对表示多态性的支持。
您习惯使用的类型有 kind Type(以前称为*)。但还有其他类型[*]。Type只是 的别名TYPE LiftedRep。我们可以更正式地将“通常”类型写($)为
($) :: forall (a :: Type) (b :: Type) . (a -> b) -> a -> b
-- ($) :: forall (a :: TYPE LiftedRep) (b :: TYPE LiftedRep) . (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)
just的引入r意味着我们不限b于“普通”类型。b不一定要有善良TYPE LiftedRep;TYPE r它可以对任何r有效的参数有 kind TYPE。
[*] 英语意义上的“kind”,而不是 Haskell 类型系统中称为“kind”的正式概念。