WinHugs/Haskell中出现模糊的"map"错误

Moj*_*oMS 1 haskell

在WinHugs中,我实现了以下功能:

map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:l) = f x : map f l
Run Code Online (Sandbox Code Playgroud)

这应该只为列表中的每个数字运行一个函数,如:

Hugs> map (+ 1) [1,2,3]
Run Code Online (Sandbox Code Playgroud)

应该给

[2,3,4].
Run Code Online (Sandbox Code Playgroud)

但是当我尝试加载*.hs脚本时,WinHugs会给出错误消息

ERROR file:.\script.hs:3 - Ambiguous variable occurrence "map"
*** Could refer to: Main.map Hugs.Prelude.map 
Run Code Online (Sandbox Code Playgroud)

第3行是 map f (x:l) = f x : map f l

我该如何避免这个问题?我想我的偏好/设置中的某些内容是错误的.

Gre*_*con 5

您看到错误,因为Haskell Prelude已经定义了一个名为的函数map.一个简单的修复方法是重命名您的定义,例如,

mymap :: (a -> b) -> [a] -> [b]
mymap f [] ...
Run Code Online (Sandbox Code Playgroud)

更复杂的方法是排除Prelude对mapwith 的定义

import Prelude hiding (map)
Run Code Online (Sandbox Code Playgroud)

在您的模块的顶部.

适应性方法是单独保留定义,并以其全名应用您想要的功能

Main.map (+ 1) [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

要么

Prelude.map (+ 1) [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)