因此,我得到一个给定一个int列表的函数的结果,该函数会将列表中的所有数字都减去一个int,然后在这种情况下,我想用x除以12的新列表。如果我执行第一段编码它给我一个错误,但如果我做第二个,那是可能的。我该怎么办?为什么会给我一个错误?
let xs = [23,32,1,3]
map (/12) xs
map(/12) [23,32,1,3]
potenciasPor12 xs = map (/12) xs
这是我遇到的错误
<interactive>:176:1:
No instance for (Fractional Int)
arising from a use of ‘potenciasPor12’
In the expression: potenciasPor12 xs
In an equation for ‘it’: it = potenciasPor12 xs
答案 0 :(得分:3)
如果设置了单态性限制(在较新的GCHi中默认为禁用,但在已编译的代码中为启用),则xs
将默认为[Int]
,而不是更通用的类型{{1} }可以使用Num a => [a]
运算符。
(至少在GHCi 8.4.1中,它似乎默认为(/)
而不是Integer
。)
Int
始终提供明确的类型签名以确保:
% ghci
GHCi, version 8.4.1: http://www.haskell.org/ghc/ :? for help
Prelude> let xs = [1,2]
Prelude> :t xs
xs :: Num a => [a]
Prelude> :set -XMonomorphismRestriction
Prelude> let ys = [1,2]
Prelude> :t ys
ys :: [Integer]