我很难理解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代表,在所有合约相同类型的,现在看来,这c和d在来表示a …
haskell types functional-programming currying type-signature