2014-01-09 30 views
1

在WinHugs我已经实现了以下功能:发生暧昧“地图”错误WinHugs /哈斯克尔

Hugs> map (+ 1) [1,2,3] 

map :: (a -> b) -> [a] -> [b] 
map f [] = [] 
map f (x:l) = f x : map f l 

像一个列表这应该只是运行每个数的函数

应该给

[2,3,4]. 

但是,当我尝试加载*开发文件脚本WinHugs给出的ErrorMessage

ERROR file:.\script.hs:3 - Ambiguous variable occurrence "map" 
*** Could refer to: Main.map Hugs.Prelude.map 

线3 map f (x:l) = f x : map f l

我怎样才能避免这样的问题?我想我的偏好/设置中有一些是错误的。

+0

重命名功能,比方说,'map'' 。 – arrowd

回答

5

您所看到的错误,因为Haskell的前奏已经定义了一个名为map功能做。一个简单的解决方法是重新命名你的定义,例如,例如

mymap :: (a -> b) -> [a] -> [b] 
mymap f [] ... 

更复杂的方法是在你的模块的顶部

import Prelude hiding (map) 

排除的map前奏的定义。

收容的做法是息事宁人的定义和应用要通过其全名的功能,无论是

Main.map (+ 1) [1, 2, 3] 

Prelude.map (+ 1) [1, 2, 3] 
1

问题是,您有两个map函数的作用域,内置的Prelude.map和您在script.hs中定义的函数。您可以参考它直接作为

> Main.map (+1) [1, 2, 3] 

或者你可以只使用内置map,因为它在完全相同的方式的已定义。

如果你想使用Prelude.map与您的自定义范围map,你可以

> Prelude.map (+1) [1, 2, 3]