gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:42:58 25 4
gpt4 key购买 nike

看来需要明确说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 的需要而定制的。 , 和类似的类型在其他上下文中很有用。

关于haskell - 为什么 `forall` 需要在数据定义中具有多态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32588983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com