Types 确定elm脚本中的类型签名
由于我正在学习church编码并试图降低复杂性,因此我使用Types 确定elm脚本中的类型签名,types,functional-programming,elm,Types,Functional Programming,Elm,由于我正在学习church编码并试图降低复杂性,因此我使用elm来实现代码。但我遇到了一个问题,就是我无法理解类型签名 type alias Peano = (Int -> Int) -> Int -> Int fwd : Int -> Int fwd x = x + 1 c3 : Peano c3 f = f >> f >> f cExp: ??? cExp cm cn = cn cm 但是,在elm repl >
elm
来实现代码。但我遇到了一个问题,就是我无法理解类型签名
type alias Peano = (Int -> Int) -> Int -> Int
fwd : Int -> Int
fwd x = x + 1
c3 : Peano
c3 f =
f >> f >> f
cExp: ???
cExp cm cn =
cn cm
但是,在elm repl
> cExp cm cn = cn cm
<function> : a -> (a -> b) -> b
> cExp c3
<function> : (((a -> a) -> a -> a) -> b) -> b
> cExp c3 c3
<function> : (a -> a) -> a -> a
> cExp c3 c3 fwd
<function> : number -> number
> cExp c3 c3 fwd 0
27 : number
所以,
cExp c3 c3 fwd 0 = 27
有什么问题吗
我想知道这是一个与
elm
中的无限类型相关的问题,但我没有足够的知识来理解正在发生的事情。问题是,您正在用Int
定义Peano
,而实际上参数可以是函数。您应该使其更通用:
键入别名Peano a=(a->a)->a->a
现在您必须更新您的教堂数字:
c3:Peano a
c3 f=
f>>f>>f
(旁注:Elm的>
运算符是函数合成,但方向相反。使用常规函数合成运算符
cExp c3 c3 fwd 0 = 27