gpt4 book ai didi

haskell - Haskell 中的简单算术

转载 作者:行者123 更新时间:2023-12-02 16:41:40 25 4
gpt4 key购买 nike

我是 Haskell 的新手,为了熟悉它,我正在做一些基本的代码 katas。目前,我正在做Kata Potter我有以下代码片段,我不知道其中有什么问题。

import Test.Hspec

priceOf :: [Int] -> Int
priceOf xs = 8 * (length xs)

main :: IO ()
main = hspec $ do
describe "Harry Potter book prices" $ do
context "Simple discounts" $ do
it "should apply a discount to two different books" $ do
priceOf [0, 1] `shouldBe` 0.95 * 8 * 2

当尝试使用 cabal 运行它时,它最终会抛出以下错误

No instance for (Fractional Int) arising from the literal '0.95'
In the first argument of '(*)', namely '0.95'
In the first argument of '(*)', namely '0.95 * 8'
In the second argument of 'shouldBe', namely '0.95 * 8 * 2'

进一步阅读此处的类似主题以及 Haskell wiki 上有关转换数字的章节,我找到了 fromIntegral 函数,但仍然不明白,我不知道在 Haskell 中不同类型之间应用基本算术的正确方法应该如何。

有人可以帮忙吗?

谢谢!

最佳答案

这里的问题是(从错误消息中推断)priceOf 返回一个 Int0.95 * 8 * 2 具有多态类型Fractional a => ashouldBe 强制这些类型相同。但 Int 不是 Fractional 类型,因此您会得到“没有 Fractional Int 实例”。

解决这个问题的方法:

  1. 使 priceOf 返回 Fractional 类型,例如,或
  2. 使用 roundfloorceiling 之一将 0.95 * 8 * 2 转换为 Int 取决于您的要求。

关于haskell - Haskell 中的简单算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227806/

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