我的问题是如何通过分析Haskell类型签名来处理它。为了具体说明,我正在看“fix”函数:
fix :: (a -> a) -> a
我写了一个小的虚构函数来执行类似于 Peano 的加法:
add = \rec a b -> if a == 0 then b else rec (a-1) (b+1)
当我检查类型时,我得到了我期望的
fix add
类型。fix add :: Integer -> Integer -> Integer
看起来它的执行结果和我预期的一样:
> (fix add) 1 1
2
我该如何使用 fix
和 add
的类型签名来展示 fix add
具有上述签名?在处理类型签名时,有哪些“代数”的规则可以遵循?我应该如何“展示我的工作”?
fix
中的a
必须是(a -> a -> a)
)。但是还缺少一步吗?在((a -> a -> a) -> (a -> a -> a)) -> (a -> a -> a)
和a -> a -> a
之间是否有一些中间步骤? - Chrisfix
部分应用于add
。生成的部分应用函数的类型为a -> a -> a
。 - cdkfix
应用于add
,会从fix
的类型中移除((a -> a -> a) -> (a -> a -> a))
参数。 - Gabriella Gonzalez