【发布时间】:2020-05-16 05:19:25
【问题描述】:
我正在尝试将函数映射到 Map(来自 Data.Map)实例上,以将其转换为新类型的 Map。具体来说,我有 2 种类型的地图:
type Scope = Map.Map String AExpr
type Row = Map.Map String Value
将AExpr 映射到Value 的函数(给定它的第一个参数 Scope ):
evalAExpr :: Scope -> AExpr -> Value
还有一个Scope 类型的实例,比如x,我想为此映射函数evalAExpr 以获得Row 类型的实例。
根据documentation,这应该可以简单地使用:
map :: (a -> b) -> Map k a -> Map k b
所以在我的情况下是:
x :: Scope
evalAExpr :: Scope -> AExpr -> Value
y = map (evalAExpr x) x :: Row
因为Scope 的类型为Map String AExpr,而Row 的类型为Map String Value。
但是,我收到以下错误:
* Couldn't match type `Map.Map String AExpr' with `[AExpr]' Expected type: [AExpr] Actual type: Scope * In the second argument of `map', namely `g' In the expression: map (evalAExpr g) g In an equation for r': r' = map (evalAExpr g) g | 43 | r' = map (evalAExpr g) g
不知道为什么它坚持期望 AExpr 列表而不是 Map String AExpr ( = Scope )。如果有人可以帮助我解决我做错了什么以及如何解决这个问题,我们将不胜感激!
【问题讨论】:
标签: dictionary haskell types casting map-function