`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
  • 为什么编译器需要Type -> Type(即Identity(类型?如果将Identity替换为Int,则无法键入check
  • 什么是foreach关键字,如何在Haskell中使用它

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

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类型似乎实际上是IdentityType -> Type签名提升了一个级别的部分应用的->运算符。。。时髦的东西。

最新更新