在Haskell中查找正方形(f(g x))的类型

时间:2019-05-22 15:53:14

标签: haskell

您好,我在查找正方形(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),但我觉得我在这里做错了...

1 个答案:

答案 0 :(得分:4)

您在某种程度上过于笼统,我不太了解。

如果您要说明x :: b,则可以将g应用于xg :: 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 :: cf (g x) :: Int,也意味着square (f (g x)) :: Int