根据pointfree
\x -> (x, x)相当于:
join (,)说明这一点的推导是什么?
发布于 2015-04-18 05:58:10
查看类型签名:
\x -> (x, x) :: a -> (a, a)
(,) :: a -> b -> (a, b)
join :: Monad m => m (m a) -> m a应该注意的是,((->) r)是Monad类型的一个实例。因此,关于专门性:
join :: (r -> r -> a) -> (r -> a)join对函数的作用是将给定的函数两次应用于同一个参数:
join f x = f x x
-- or
join f = \x -> f x x从这一点上,我们可以看到:
join (,) = \x -> (,) x x
-- or
join (,) = \x -> (x, x)Qed。
发布于 2015-04-18 08:52:31
我喜欢Aadit直观的答案。下面是我通过阅读源代码来解决这个问题的方法。
joinjoinjoinjoin x = x >>= idjoin (,) = (,) >>= id(,),这是一个函数,所以我 instancef >>= k = \r -> k (f r) rf = (,)和k = id,所以我们得到了\r -> id ((,) r) rid!我在Hoogle和click through to its source code上搜索id x = xjoin (,),而是\r -> ((,) r) r\r -> (,) r r是一样的\r -> (r,r)是一样的永远不要忘记Haddocks链接到库的源代码。在试图找出事物是如何一起工作的时候,这是非常有用的。
https://stackoverflow.com/questions/29713442
复制相似问题