玩教堂的数字.我遇到的情况是我无法引导GHC类型检查器绕更高阶类型.
首先我写了一个没有任何类型签名的版本:
module ChurchStripped where
zero z _ = z
inc n z s = s (n z s)
natInteger n = n 0 (1+)
add a b = a b inc
{-
*ChurchStripped> natInteger $ add (inc $ inc zero) (inc $ inc $ inc zero)
5
-}
mult a b = a zero (add b)
{-
*ChurchStripped> natInteger $ mult (inc $ inc zero) (inc $ inc $ inc zero)
6
-}
Run Code Online (Sandbox Code Playgroud)
推断类型mult是可怕的,所以我试图用类型定义清理类型:
module Church where …Run Code Online (Sandbox Code Playgroud) haskell ×1