gpt4 book ai didi

haskell - Haskell 中表达式的类型

转载 作者:行者123 更新时间:2023-12-02 10:11:57 25 4
gpt4 key购买 nike

我是 Haskell 新手,在理解该语言的一些概念时遇到了一些困难。

我有以下表达式:

\f x → (f x,f 1)

根据我的理解,我可以说:

  • 一开始,我无法真正说出 f 是什么,因为我没有任何信息,所以我说它可以是任何东西。

    那么从(f x)的应用来看我可以说它是一个a->b 类型的函数,其中 x::a

    那么从 (f 1) 的应用来看,我可以说 a 是类型为 Integer,因此 x 是相同类型

然后我真的不明白为什么整个表达式是类型:

(整数 → b) → 整数 → (b, b)

我有一点猜测,我要说的是:

(Integer → b) 是函数 f 的类型,因此它接收整数并返回类型 b

Integer 是 x 的类型

(b b) 调用的两个函数的类型是?

有人能给我指出正确的方向吗?谢谢

最佳答案

整个 lambda 接受函数 fx 作为输入;它产生一双;该对的第一个元素是将 f 应用于 x 的结果,第二个元素是将 f 应用于 1 的结果。从 f 1 中,我们知道 f 的输入必须限制为Num 类型类。

getPair :: Num a => (a -> b) -> a -> (b, b)
getPair = \f x -> (f x, f 1)

唯一的约束是Num a =>

getPair id 8.9 => (8.9, 1.0)
getPair (\x -> x > 0) (-9.8) => (False, True)

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

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