根据 pointfree
:
\x -> (x, x)
相当于:
join (,)
说明这一点的推导是什么?
请您参考如下方法:
查看类型签名:
\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。