Skip to main content
 首页 » 编程设计

haskell之显示 Haskell 的\x -> (x, x) 等价于 join (,) 的推导是什么

2025年02月15日33yjmyzz

根据 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。