【发布时间】:2026-01-04 16:30:01
【问题描述】:
我现在正在学习haskell。 但我正在为“类型”而苦苦挣扎。
- 例如,
f函数的类型是
f g (x,y)= g x y
(a -> b -> c) -> (a, b) -> c
- 以下 Haskell 函数 h 的类型
h f g x y = f (g x y) x
(a -> b -> c) -> (b -> d -> a) -> b -> d -> c
我如何理解如何猜测函数的类型?
【问题讨论】:
-
为什么叫它“猜测”?不涉及猜测。
-
但更具建设性:您是否尝试过自己弄清楚类型必须是什么? (从第一个开始,因为它更容易,尽管两者都适用完全相同的推理。)例如,关于第一个参数
g的类型,你能说多少? -
类型签名非常清晰。
f :: (a -> b -> c)这意味着f的第一个参数是a类型,g的返回值必须是a类型。f的第二个参数x是b类型,它产生g的第一个参数,它也是x成为b类型,它产生g来获取一个类型像(b -> d -> a)这样的签名,而类型参数d分配给函数h的y参数。所以h函数的类型原来是(a -> b -> c) -> (b -> d -> a) -> b -> d -> c
标签: haskell higher-order-functions