我试图手动在Haskell中找到(.).(.)
的类型。
我的尝试如下:
(.).(.) = \x -> (.).(.) x
(.) :: ( b -> c ) -> (( a -> b ) -> (a -> c))
(.) :: (d -> e) -> ((f -> d) -> (g -> e))
(.) :: (h -> i) -> (j -> h) -> (h -> k)
-----------------------------------------------------------------------------------------------------
b ~ (d -> e) ~ (j -> h) -> (h -> k)
c ~ ((f -> d) -> (g -> e))
a ~ (h -> i)
d ~ h
e ~ i
so (a->c)~ (h->i) -> ((f -> h) -> (g -> i))
我的思维方式有什么问题?实际类型是
(.).(.) :: (b -> c) -> (a1 -> a2 -> b) -> a1 -> a2 -> c
最佳答案
让我们看看等效的(.) (.) (.)
第一个点类型:(b -> c) -> (a -> b) -> a -> c
第二:(e -> f) -> (d -> e) -> d -> f
因此:b
与e -> f
相同c
与(d -> e) -> d -> f
相同
第三:(h -> i) -> (g -> h) -> g -> i
因此:a
与h -> i
相同b
与(g -> h) -> g -> i
相同e -> f
是(g -> h) -> g -> i
e
是g -> h
f
是g -> i
由于第一个点类型的(.) (.) (.) :: a -> c
,我们有:a -> c
是(h -> i) -> (d -> e) -> d -> f
替换e
和f
:(h -> i) -> (d -> g -> h) -> d -> g -> I
回答您的问题,我认为您的想法有问题,是最后两行,例如:d ~ h
,e ~ i