操作员(/ x)的问题映射功能

时间:2018-11-06 16:08:39

标签: function haskell mapping

因此,我得到一个给定一个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

1 个答案:

答案 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]