haskell - haskell 中的 `foreach`

标签 haskell dependent-type

此代码类型检查:

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,它无法进行类型检查。
  • 什么是 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 类型实际上是来自 Identity 的部分应用的 -> 运算符s Type -> Type 签名提升了一个级别……时髦的东西。

关于haskell - haskell 中的 `foreach`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70948564/

相关文章:

haskell - 为什么 foldr 可以处理 Haskell 中的无限列表,而 foldl 不行?

haskell - 如何将 QuickCheck 参数限制为非空字符串列表?

coq - 为什么较新的依赖类型语言没有采用 SSReflect 的方法?

proof - 如何证明类型在 Agda 中有效?

haskell - 如何使 Vect n Int 成为 Monoid 的实例

multithreading - 如何使用Data.Concurrent.mergeIO?

Haskell:读取并输入签名

haskell - Haskell 中的两个无限数据结构之间是否可以进行相等测试?

haskell - Haskell 中类型类的类型级别指示符函数

type-safety - 如何约束输入类型和输出类型相同?