Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 类型(.)。(.)_Haskell_Types - Fatal编程技术网

Haskell 类型(.)。(.)

Haskell 类型(.)。(.),haskell,types,Haskell,Types,如何推断(.)的类型。()是(b->c)->(a->a1->b)->a->a1->c (我的想法显然是错误的:()的类型是(t2->t3)->(t1->t2)->t1->t3,这应该与(t2->t3)->[(t1->t2)->(t1->t2)->(t1->(t1->t3)->(也使用[[{}的可读性)。因此,()的类型应该类似于{(b2 b3)->[(b1 b2->b2 b2)->(b1->b3)]}->{(a2->a3)->[(a1->a2)->(a1->a3)]}这需要(b2->b3)来匹配

如何推断
(.)的类型。()
(b->c)->(a->a1->b)->a->a1->c

(我的想法显然是错误的:
()
的类型是
(t2->t3)->(t1->t2)->t1->t3
,这应该与
(t2->t3)->[(t1->t2)->(t1->t2)->(t1->(t1->t3)->(也使用
[[{}
的可读性)。因此,
()
的类型应该类似于
{(b2 b3)->[(b1 b2->b2 b2)->(b1->b3)]}->{(a2->a3)->[(a1->a2)->(a1->a3)]}
这需要
(b2->b3)
来匹配
[(a1->a2)->(a1->a3)]

但这永远不会导致想要的类型

怎么了?

表达式
(.)的意思是
(.)
。要获取其类型,让我们从以下内容开始:

(.) :: (t2 -> t3) -> (t1 -> t2) -> t1 -> t3
(.)    (.)        :: ???
让我们将second
(.)
的类型alpha转换为
(a2->a3)->(a1->a2)->a1->a3
。这种类型是
t2->t3
,因此我们得到

t2 = a2 -> a3
t3 = (a1 -> a2) -> a1 -> a3
t1 = b2 -> b3
a2 -> a3 = (b1 -> b2) -> b1 -> b3
因此,

(.) (.) :: (t1 -> t2) -> t1 -> t3    with the above t2,t3
(.) (.) :: (t1 -> a2 -> a3) -> t1 -> (a1 -> a2) -> a1 -> a3
现在,

让第三个
()
具有类型
(b2->b3)->(b1->b2)->b1->b3
。 这是
t1->a2->a3
,所以我们得到

t2 = a2 -> a3
t3 = (a1 -> a2) -> a1 -> a3
t1 = b2 -> b3
a2 -> a3 = (b1 -> b2) -> b1 -> b3
因此

结论:

(.) (.) (.) :: t1 -> (a1 -> a2) -> a1 -> a3   with the above t1,a2,a3
(.) (.) (.) :: (b2 -> b3) -> (a1 -> b1 -> b2) -> a1 -> b1 -> b3
你想要哪一种

               (b  -> c ) -> (a  -> a1 -> b ) -> a  -> a1 -> c

一旦类型变量被转换为alpha。

t1
在第二个文本块中应该是
t2
@thomas.DuBuisson谢谢。修复。您是对的,这就是必须做的。非常感谢:D