【发布时间】:2017-11-13 15:28:14
【问题描述】:
在我的 Haskell 学习曲线中,我想知道是否可以实现自定义 fmap 函数 fmap' ,它会“应用”直到找到非 Functor。
例如;使用 fmap ,必须编写
fmap (fmap (*2)) [[1,2] , [ 3,4 ,5]]
[[2,4],[6,8,10]]
或
fmap (fmap (*2)) [Just 1, Just 2]
[Just 2,Just 4]
想法是写
fmap' (*2) [[1,2] , [3,4,5]]
fmap' (*2) [Just 1 , Just 2]
得到与上面相同的结果。
我目前的理解是不可能的,因为fmap'和fmap的签名不一样
:t fmap (fmap)
fmap (fmap)
:: (Functor f2, Functor f1) => f1 (a -> b) -> f1 (f2 a -> f2 b)
【问题讨论】:
-
您应该将其与
fmap . fmap的类型进行比较(不是fmap fmap)。 (另请参阅fmap . fmap . fmap等的类型)。 -- 但我知道您希望fmap'决定.连接的链中有多少fmap,对吗? -
您希望有一个函数来确定任意类型是否具有
Functor实例,但这不可能——这根本不是类型类的工作方式。通常当人们想要做这样的事情时,这是因为他们希望在这里和那里节省一些打字;关于您想要实现的目标的一些背景会有所帮助。 -
@Wil Ness,是的,你明白我想问什么
-
@user2407038 :没有上下文,只是为了帮助我进步和理解haskell技巧;
标签: haskell