Min*_*max 0 haskell lambda-calculus currying function-composition curry
t2 = (\x y z-> x.y.x)
GHCI告诉我这个:
t2 :: (b1 -> b2) -> (b2 -> b1) -> p -> b1 -> b2
我无法理解这种类型的签名是如何形成的.到目前为止,我已经认为r-most-x基本上是一个函数,它接受a b2并返回a b1,那么这b1是中间函数的输入y,并b2再次输出?它不应该返回新类型的值b3或什么?
首先让我们以一种方式重写它,以便明确哪个参数对应于类型签名的哪一部分:
t2 :: (b1->b2) -> (b2->b1) -> p -> b1 -> b2
t2 x y z = x . y . x
Run Code Online (Sandbox Code Playgroud)
z :: p 根本没有使用,所以我们可以通过改为考虑来轻松消除这种情况
t3 :: (b1->b2) -> (b2->b1) -> b1 -> b2
t3 x y = x . y . x
Run Code Online (Sandbox Code Playgroud)
为什么这种类型?好吧,组合链将结果x输入y,并将结果y反馈到x.换句话说,y让你从结果类型x回到参数类型x.因此类型y必须是"倒"型x.所以
t3 :: (m->n) -> (n->m) -> ?
t3 x y = x . y . x
Run Code Online (Sandbox Code Playgroud)
组合的类型由"外端"支配,即参数必须是参数的类型,x结果必须是...的结果类型x.于是
t3 :: (m->n) -> (n->m) -> m->n
t3 x y = x.y.x
Run Code Online (Sandbox Code Playgroud)
这是GHCi告诉你的,重命名的类型变量.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |