考虑以下包装器:
newtype F a = Wrap { unwrap :: Int }
我想反驳(作为围绕这个有趣帖子的练习)存在一个合法Functor F实例,它允许我们将Int -> Int类型函数应用于实际内容并〜忽略〜所有其他函数(即fmap nonIntInt = id)。
我相信这应该用一个自由定理来完成(我在这里fmap读到): 对于给定的 ,和,这样: ,给定构造函数的自然映射在哪里。fghkg . f = k . h$map g . fmap f = fmap k . $map h$map
什么定义了自然地图?我是否正确地假设它是一个简单flip const的 for F?
据我所知:$map f是我们Ff在范畴论中所指的。因此,从分类的意义上说,我们只是想要下图中的一些东西来通勤:

然而,我不知道用什么代替???s (也就是说,我们应用什么函子来得到这样的图,我们如何表示这个几乎fmap-?)。
那么,一般来说,什么是自然地图F?的自由定理的正确图是什么fmap?
我要去哪里?
考虑:
f = const 42
g = id
h = const ()
k () = 42
很容易看出f . g是h . k。然而,不存在的fmap只会执行,而f不是k,给出不同的结果。如果我对自然性的直觉是正确的,那么这样的证明就会奏效。这就是我想要弄清楚的。
@leftaroundabout提出了一个更简单的证明:fmap show . fmap (+1)改变内容,不像fmap $ show . (+1). 这是一个很好的证明,但我仍然想将自由定理作为练习。