如何在Haskell中使用fromInteger?

Mic*_*kel 4 haskell ghc ghci

在haskell中计算2 ^ 8的一种方法是通过写入

product(replicate 8 2)
Run Code Online (Sandbox Code Playgroud)

在尝试为此创建函数时,定义如下...

power1 :: Integer ?  Integer ? Integer
power1 n k | k < 0 = error errorText
power1 n 0 = 1
power1 n k = product(replicate k n)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Couldn't match expected type 'Int' against inferred type 'Integer'
Run Code Online (Sandbox Code Playgroud)

我的猜测是我必须在某个地方使用fromInteger功能...我只是不确定在哪里或如何?它是一个接口还是fromInteger,我应该如何使用它?

谢谢

Don*_*art 11

首先,永远不要使用fromInteger.使用fromIntegral.

您可以通过查看复制类型来查看类型错误的位置:

replicate :: Int -> a -> [a]
Run Code Online (Sandbox Code Playgroud)

所以当你把'k'作为一个参数,你通过类型声明声明它是一个Integer时,我们有一个类型错误.

更好的方法是使用genericReplicate:

genericReplicate :: (Integral i) => i -> a -> [a]
Run Code Online (Sandbox Code Playgroud)

那么:

power1 n k = product (genericReplicate k n)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用fromInteger? (9认同)
  • 你应该提到`genericReplicate`在`Data.List`模块中 (2认同)