gpt4 book ai didi

haskell - 推断 lambda 表达式的类型

转载 作者:行者123 更新时间:2023-12-01 11:16:29 27 4
gpt4 key购买 nike

给定一个具有以下类型的函数 a:
a::x -> Bool
和以下类型的另一个函数 b:
b::Bool -> y
我正在尝试找出推断以下函数类型的步骤:
c =\d -> d a b
有人可以帮助解释如何做到这一点,而不仅仅是通过 ghc 的 :type 函数吗?谢谢

最佳答案

c =\d -> d a b 的类型将是 c::((x -> Bool) -> (Bool -> y) -> t) -> t

其中 d 是一个接受 (x -> Bool)(Bool -> y) 并返回 a 的函数t 类型的值。

所以 c 是一个函数,它接受 d 类型的函数并返回 t 类型的值

如果你的意思是 c =\d -> d (a b) 类型将是 c::(Bool -> y) -> y

一些额外的解释。

要了解 c 我们必须首先知道 d 做了什么所以我们看一下 c =\d -> d a b

我们看到 \d -> d a b 所以我们知道 d 的第一个参数是类型为 (x -> bool )。我们还知道 d 的第二个参数,它是类型为 (Bool -> y) 的函数 b。但我们不知道它返回什么,因为这是 Haskell,它必须返回一些东西,所以我将把 t 写成未知类型。所以 dd::a -> b -> t

替换 ab 的类型,我们得到 d::(x -> Bool) -> (Bool -> y) -> t.

现在对于 cc 是一个 lambda,它接受一个我们可以推断为 d 类型的值,并返回它的输出。所以我们得到 c::d -> (d 的输出)

代入 d 的类型,我们得到 c::((x -> Bool) -> (Bool -> y) -> t) -> t

关于haskell - 推断 lambda 表达式的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com