gpt4 book ai didi

compiler-errors - PureScript无法匹配相同的约束类型

转载 作者:行者123 更新时间:2023-12-02 10:45:14 25 4
gpt4 key购买 nike

我想知道为什么PureScript无法匹配两个受约束的类型,即字符之间的相同!请参阅下面的错误消息。产生它的代码在下面立即给出:

-- We are using https://pursuit.purescript.org/packages/purescript-sized-vectors/1.0.0
import Data.Typelevel.Num (class Lt, class Nat, D2, D7)
import Data.Vec (Vec, modifyAt)
import Prelude (($))

newtype FixedMatrix72 a = FixedMatrix72 (Vec D2 (Vec D7 a))

type Row = forall n. (Nat n, Lt n D2) => n
type Col = forall n. (Nat n, Lt n D7) => n
newtype Ref = Ref { row :: Row, col :: Col }

-- Compiler error is for this function
modify :: forall a. Ref -> (a -> a) -> FixedMatrix72 a -> FixedMatrix72 a
modify (Ref ref) f (FixedMatrix72 m) =
FixedMatrix72 $ modifyAt ref.row (modifyAt ref.col f) m

编译器错误:
    Could not match constrained type

( Nat t0
, Lt t0 D2
) => t0

with type

( Nat t0
, Lt t0 D2
) => t0


while trying to match type ( Nat t0
, Lt t0 D2
) => t0
with type ( Nat t0
, Lt t0 D2
) => t0
while solving type class constraint

Data.Typelevel.Num.Ops.Lt (( Nat t0
, Lt t0 D2
) => t0
)
D2

while checking that expression \$0 ->
\f ->
\$1 ->
case $0 f $1 of
...
has type forall a. Ref -> (a -> a) -> FixedMatrix72 a -> FixedMatrix72 a
in value declaration modify

where t0 is an unknown type

See https://github.com/purescript/purescript/wiki/Error-Code-ConstrainedTypeUnified for more information,
or to contribute content related to this error.

最佳答案

错误消息不是很好,但是并不是说类型不是不可统一的。据说编译器永远不会尝试统一受约束的类型,因为传递正确的字典会变得很复杂。因此,如果在类型检查器中达到这一点,我们将放弃并显示此错误消息。

幸运的是,它仅在非常特殊的情况下出现,涉及类型系统功能之间的各种交互(在这种情况下,其字段类型是多态的并涉及类型类的记录)。

一种解决方案是使用newtype而不是类型同义词。

关于compiler-errors - PureScript无法匹配相同的约束类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088168/

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