我的问题是关于如何分析地使用 Haskell 类型签名。具体来说,我正在查看“修复”功能:
fix :: (a -> a) -> a
和一个我写的做Peano-ish加法的小函数:
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
我如何使用 forfix
和 for的类型签名add
来显示fix add
具有上述签名的?什么是“代数”,如果这是正确的词,那么使用类型签名的规则是什么?我怎么能“展示我的作品”?