我没有完全得到Map.Map部分。我理解当我导入限定为Map时,我需要将地址作为地址加上前缀。' Map。'但是,通常后面跟着一个函数(例如,查找'),这里使用了两种类型。
import qualified Data.Map as Map
phonebook :: Map.Map String String
我得到那个电话簿需要一个字符串和一个字符串,但是严格地说Map.Map表示它是一个关联列表,还是有更多呢?为什么省略箭头?
答案 0 :(得分:7)
Data.Map
导出名为Map
的类型:
data Map k a
其隐藏的定义。限定导入意味着要引用该类型,您需要在as
之后添加名称。所以Map.Map
只是有限地图类型构造函数的名称。
Map.Map String String
只是从字符串到字符串的有限映射类型。
答案 1 :(得分:3)
phonebook
的类型为Map String String
(如果您要使用import Data.Map (Map)
导入)。也就是说,它是Strings
到Strings
的映射。
更一般地说,Map
类型构造函数可以写成Map key value
,其中key
和value
可以被认为是类型参数尚未应用< / em>的。因此,我们说Map
有种 * -> * -> *
,其中星星本身就是具体类型。
所以...
import qualified Data.Map as Map
phonebook :: Map.Map String String -- passing "arguments" to Map here
phonebook = undefined
你phonebook
有*
种类。