显示Haskell的\x - >的推导是什么? (x,x)等价于join(,)? [英] What is the derivation that shows Haskell's \x -> (x, x) equivalent to join (,)?
本文介绍了显示Haskell的\x - >的推导是什么? (x,x)等价于join(,)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
pointfree
: \x - > (x,x)
相当于:
加入(,)
什么是派生看看类型签名:
<$ p $显示这个?
解决方案 p>
\x - > (x,x):: a - > (a,a)
(,):: a - > b - > (a,b)
join :: Monad m => m(m a) - >
$ b 值得注意的是(( - >)r)
是 Monad
typeclass的一个实例。因此,关于专门化:
join ::(r - > r - > a) - > (r - > a)
什么加入
for函数是将给定的函数两次应用于相同的参数:
加入fx = fxx
- 或
加入f = \ x - > fxx
由此可以看出:
加入(,)= \ x - > (,)x x
- 或
join(,)= \ x - > (x,x)
Qed。
According to pointfree
:
\x -> (x, x)
is equivalent to:
join (,)
What is the derivation that shows this?
解决方案 Look at the type signatures:
\x -> (x, x) :: a -> (a, a)
(,) :: a -> b -> (a, b)
join :: Monad m => m (m a) -> m a
It should be noted that ((->) r)
is an instance of the Monad
typeclass. Hence, on specializing:
join :: (r -> r -> a) -> (r -> a)
What join
does for functions is apply the given function twice to the same argument:
join f x = f x x
-- or
join f = \x -> f x x
From this, we can see trivially:
join (,) = \x -> (,) x x
-- or
join (,) = \x -> (x, x)
Qed.
这篇关于显示Haskell的\x - >的推导是什么? (x,x)等价于join(,)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文