显示Haskell的\x - >的推导是什么? (x,x)等价于join(,)? [英] What is the derivation that shows Haskell's \x -> (x, x) equivalent to join (,)?

查看:610
本文介绍了显示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 - &gt;的推导是什么? (x,x)等价于join(,)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆