小编Gol*_*man的帖子

函数类型签名中的右关联性

我很难理解Haskell中类型签名背后的原因.

1)->据说是右关联的,是否意味着它可以用类似的方式理解,例如4 ^(2 ^(3 ^ 2))?

2)使用简单函数的类型签名,以表达我的疑惑(来解释我的理解是,我会用a,b,c来代替Num a => a的或Int的):

myAdd :: a -> b -> c
myAdd x y = x+y
Run Code Online (Sandbox Code Playgroud)

这意味着函数接受参数a并返回b最终返回的函数c

但它可以重写为:

myAdd :: (a->(b->c))
Run Code Online (Sandbox Code Playgroud)

由于大多数学习材料都表明c在我们的例子中是函数myAdd的结果,为什么根据括号的使用它表明第一个'操作'是b->c?如何从该类型签名推断出执行操作的顺序?

3)我被赋予了执行任务

map f xs 
Run Code Online (Sandbox Code Playgroud)

使用 foldr,(.)(:)导致:

map f xs = foldr ((:) . f) [] xs
Run Code Online (Sandbox Code Playgroud)

我对理解上述功能的工作没有任何问题,但我们再来一次 - 键入签名.如果我们假设,这名都是统一的这样类型的a代表,在所有合约相同类型的,现在看来,这cd在来表示a …

haskell types functional-programming currying type-signature

0
推荐指数
1
解决办法
450
查看次数