我正在尝试为函数实现fmap,并且无法弄清楚如何将“lift”应用于函数,而不是所有文档引用的简单类型如Maybe
我想要实现的功能类型是
fmapFunction :: (a -> b) -> (e -> a) -> (e -> b)
我应该怎么做呢?
答案 0 :(得分:11)
可能更容易看到你是否翻转了类型:
(e -> a) -> (a -> b) -> (e -> b)
我们可以将e
变为a
,将a
变为b
。那么我们如何将e
变成b
?
不要过分关注“提升”;对于Functor
个实例,发现实现的最佳方法就是遵循类型。