Haskell 中的`foreach`

`foreach` in Haskell

此代码类型检查:

type T :: Type -> foreach (r :: Type) -> Type -> Type
data T k r a

type T' :: Type -> Type
type T' a = T a Identity a

不是关键字,只是隐式量化的类型变量。就像你写一个函数

foo :: Int -> foreach r -> Double
foo = undefined

main = print ( foo 123 (Just 'w')
             , foo 789 [False, True, False] )

...所以 foreach r 可以与 Maybe Char[Bool] 统一,但不能统一,例如 Float.

现在,在你的例子中它更奇怪,因为你没有应用Identity到任何东西。这意味着 T a Identity a 中的 foreach 类型实际上似乎是 Identitys Type -> Type 签名中部分应用的 -> 运算符提升了一个级别......时髦的东​​西.