Функции отображения неисправностей с оператором (/ х) - PullRequest
0 голосов
/ 06 ноября 2018

Итак, у меня есть результат функции, которая дает список целых чисел, вычитает 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 голосов
/ 06 ноября 2018

Если установлено ограничение мономорфизма (по умолчанию оно отключено в более новом GCHi, но включено в скомпилированном коде), то xs по умолчанию будет [Int], а не более общим типом 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]

Всегда предоставляйте явные подписи типов, чтобы быть уверенными:

% ghci -XMonomorphismRestriction
GHCi, version 8.4.1: http://www.haskell.org/ghc/  :? for help
Prelude> let xs = [23,32,1,3] :: Num a => [a]
Prelude> :t xs
xs :: Num a => [a]
Prelude> map (/12) xs
[1.9166666666666667,2.6666666666666665,8.333333333333333e-2,0.25]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...