繁体   English   中英

为什么`forall`需要在数据定义中具有多态类型?

[英]Why is `forall` required to have a polymorphic type in data definition?

似乎我需要明确地说forall在数据定义中具有参数类型。 例如,这个

data A = A (forall s. ST s (STUArray s Int Int))

这将是有效的

data A = A (ST s (STUArray s Int Int))

惯于。

也许我会问一些太明显的东西,但是我不清楚这个原因,因为在大多数其他情况下你不需要明确的forall来指定参数类型; 编译器会这样做。 那么这里的区别是什么?

forall有两个不同的地方,其中只有一个是你想要的。 另一个是

data A = forall s . A (ST s (STUArray s Int Int))

这相当于GADT语法

data A where
  A :: ST s (STUArray s Int Int) -> A

这可以被认为是一个装有ST状态变压器的盒子,有些s或其他完全没用。 但是类型检查器并不是专门针对ST的需求而定制的,类似的类型在其他环境中也很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM