在Haskell中创建映射的隐式方法

在Haskell中创建映射的隐式方法,haskell,Haskell,我在这个创建地图的例子上举步维艰。但我无法编译/复制它 data State r = S (Maybe r) (Map Char (State r)) data NumberSystem = Zero | Bin | Dec | Oct automata :: State NumberSystem automata = s where s = S Nothing ([(d,s10) | d <- ['1'..'9']] ++ [('0',s0)]) s0 =

我在这个创建地图的例子上举步维艰。但我无法编译/复制它

data State r = S (Maybe r) (Map Char (State r))
data NumberSystem = Zero | Bin | Dec | Oct
automata :: State NumberSystem
automata = s where
    s   = S Nothing     ([(d,s10) | d <- ['1'..'9']] ++ [('0',s0)])
    s0  = S (Just Zero) ([('b',s2)] ++ [(d,s8) | d <- ['0'..'7']])
    s2  = S (Just Bin)  ([('0',s2),('1',s2)])
    ...
数据状态r=S(可能是r)(映射字符(状态r))
数据编号系统=零|本|十二月|十月
自动机::状态编号系统
自动机=s其中

s=s无([(d,s10)| d可能?你确定这个
Map
实际上是
Data.Map.Map
?@joschuck简单的答案是,如果没有GHC 7.8,你就不能使用
overloadedList
。确保这里显示的
Map
类型实际上是
Data.Map.Map
,而不是
类型Map k=[(k,v)]的本地定义的类型别名
,与示例代码一样。您应该提供错误消息和完整的代码列表,以便其他人能够提供清晰简洁的答案。可以使用以下代码创建映射:
M.fromList[('a',“first”),('b',“second”)]
,其中M是数据。映射导入符合条件。在第二个代码块中使用的语法是错误的,因为haskell函数应用程序看起来像
f x
,而不是
f(x)
@joschuck leftaroundabout并不是问你是否有
数据.Map
。他问的是,在示例代码中,
Map
是否指的是
Data.Map.Map
,这不是你系统的属性。它可能是一个类型别名,如
type Map k v=[(k,v)]
,在本示例前面定义,或类似内容。
s   = S Nothing     (fromList([(d,s10) | d <- ['1'..'9']] ++ [('0',s0)]))
s0  = S (Just Zero) (fromList([('b',s2)] ++ [(d,s8) | d <- ['0'..'7']]))