gpt4 book ai didi

Haskell 无法匹配类型

转载 作者:行者123 更新时间:2023-12-02 18:23:13 26 4
gpt4 key购买 nike

我还是 Haskell 的初学者,我有这段代码,但 ghc 无法编译并给我一个错误

这是代码:

data QT a = C a | Q (QT a) (QT a) (QT a) (QT a) deriving (Show)

moltiply :: QT a -> Int -> QT a
moltiply (C a) x = (C (a * x))
moltiply (Q a b c d) x = Q (moltiply a x) (moltiply b x) (moltiply c x) (moltiply d x)

这是我得到的错误:

Couldn't match expected type ‘a’ with actual type ‘Int’
‘a’ is a rigid type variable bound by
the type signature for multiply :: QT a -> Int -> QT a
at file.hs:12:15
Relevant bindings include
a :: a (bound at file.hs:13:15)
multiply :: QT a -> Int -> QT a
(bound at file.hs:13:1)
In the second argument of ‘(*)’, namely ‘x’
In the first argument of ‘C’, namely ‘(a * x)’

最佳答案

当你写

moltiply :: QT a -> Int -> QT a

您告诉 GHC 该函数适用于您的 QT 类型中的任何类型 a,但随后您编写

moltiply (C a) x = (C (a * x))

并尝试将任何类型的值aInt相乘。这看起来不对吧?

您可以通过两种方式解决此问题:

  1. 通过删除类型签名并在 GHCi 中加载文件来询问 GHCi 最常见的 moltiply 类型是什么:

    λ> :t moltiply
    moltiply :: Num a => QT a -> a -> QT a

    然后您可以将此类型签名添加到源文件中(有利于文档)或让函数不带类型签名。

  2. 坚持使用 Int,即 moltiply 要求 QT 包含 Int:

    moltiply :: QT Int -> Int -> QT Int

关于Haskell 无法匹配类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963740/

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