在Haskell中求平方的类型(f(gx))
您好,我在查找square(f(gx))的类型时遇到问题。这是我的在Haskell中求平方的类型(f(gx)),haskell,Haskell,您好,我在查找square(f(gx))的类型时遇到问题。这是我的 square :: Int -> Int {x : b} |- g x :: (b -> c) -> c f :: (((b -> c) -> c) -> d) -> d 我有点困惑,如果它是正确的,现在怎么办d必须是Int以及整个表达式((b->c)->c)->d)但我觉得我在这里做错了什么…你在某种程度上过于笼统了,我不太明白 如果您正在声明x::b,那么如果您可以将g应用于x,g
square :: Int -> Int
{x : b} |- g x :: (b -> c) -> c
f :: (((b -> c) -> c) -> d) -> d
我有点困惑,如果它是正确的,现在怎么办
d
必须是Int
以及整个表达式((b->c)->c)->d)
但我觉得我在这里做错了什么…你在某种程度上过于笼统了,我不太明白
如果您正在声明x::b
,那么如果您可以将g
应用于x
,g::b->c
用于某些类型的c
类似地,由于可以将f
应用于gx
,因此对于某些类型d
,可以应用f::c->d
;它的参数类型必须与g
的返回类型相同
最后,您知道square::Int->Int
,您可以将square
应用于f
的返回值。这意味着通过将f
的返回类型与square
的参数类型统一起来,f::c->Int
不过,这是你所能做到的:
square :: Int -> Int
f :: c -> Int
g :: b -> c
x :: b
然后你就知道
gx::c
和f(gx)::Int
,意思是正方形(f(gx))::Int
。你从哪里得到f
的类型?对于gx
类型,同样的问题。还有,你为什么要看这两个呢?如果您只想知道square(f(gx))
的类型,并且您已经知道square::Int->Int
,那么square(f(gx))
必须是Int
假设所有类型都进行了类型检查,而不管f
、g
或x
的类型是什么(最通用的类型)不仅仅是结果的类型表达式的最通用类型是Int
@heisenberg7584在几乎所有现代类型系统中,整个表达式的类型没有其结果的类型那么通用。