您好,我在查找正方形(f(g x))时遇到问题。这就是我所拥有的。
square :: Int -> Int
{x : b} |- g x :: (b -> c) -> c
f :: (((b -> c) -> c) -> d) -> d
如果正确的话,我有点困惑。 d
必须是Int
以及整个表达式(((b -> c) -> c) -> d)
,但我觉得我在这里做错了...
答案 0 :(得分:4)
您在某种程度上过于笼统,我不太了解。
如果您要说明x :: b
,则可以将g
应用于x
,g :: b -> c
,用于某些类型c
。
类似地,由于您可以将f
应用于g x
,然后将f :: c -> d
应用于某些类型d
;它的参数类型必须与g
的返回类型相同。
最后,您知道square :: Int -> Int
,并且可以将square
应用于f
的返回值。这意味着f :: c -> Int
通过将f
的返回类型与square
的参数类型统一起来。
那是您所能做到的,
square :: Int -> Int
f :: c -> Int
g :: b -> c
x :: b
然后,您知道g x :: c
和f (g x) :: Int
,也意味着square (f (g x)) :: Int
。