我很难理解实施某些功能的问题。我有一个通用数据类型定义如下:
import qualified Data.Map.Strict as Map
data Stuff x = Stuff (Map.Map x [x])
当我尝试实现这样的功能时:
foo :: Ord x => x -> x -> Stuff x -> Stuff x
foo a b (Stuff c) = Stuff (Map.insert (a b c))
我收到错误:
Couldn't match expected type ‘Map.Map x [x]’
with actual type ‘a0 -> Map.Map k0 a0 -> Map.Map k0 a0’
但是,当我在Haskell文档中验证签名时:
insert :: Ord k => k - > a - >映射k a - >映射k a
如果它返回"地图k a",则无法输入" a"是个名单?我怎么能转过" a"进入" [a]"?
答案 0 :(得分:8)
(a b c)
将函数a
应用于参数b
和c
,当您希望提供a
b
和{{ 1}}作为c
的参数。您无法直接提供Map.insert
,因为它的类型错误(b
而不是x
),但您可以创建要插入的单例列表:
[x]