【发布时间】:2020-11-28 00:21:18
【问题描述】:
mapFunctor :: Functor f => (a -> b) -> [f a] -> [f b]
这个函数应该是map的概括。它与map 函数的工作方式相同,并且适用于任何Functor,而不仅仅是Maybe。
我被困住了。任何提示都会有所帮助!谢谢。
【问题讨论】:
-
提示:看看
fmap。 -
提示:把类型签名想象成
(a -> b) -> ([f a] -> [f b])——即给定一个函数a -> b,你如何得到一个新函数[f a] -> [f b]?如果看不懂怎么做,能不能先弄个函数f a -> f b?如果是这样,你能看到如何从它变成你想要的类型吗? -
当我使用 fmap 时,出现错误信息,期望类型:[f b],实际类型 [b]
-
@Jacky: 是的,你不能直接使用
fmap,以后它会查看外部类型构造函数,参见[]并专门化f ~ []。你需要以某种方式组合fmap和map。 -
要记住的另一件有用的事情是
[x]是[] x的语法糖,例如[f a]=[] (f a)和[[a]]=[] ([] a)
标签: list haskell functor map-function