gpt4 book ai didi

haskell - 为什么 Haskell 中没有 runConst 函数?

转载 作者:行者123 更新时间:2023-12-02 13:38:12 24 4
gpt4 key购买 nike

是否有约定让我知道何时需要 runXgetX 类型类函数?

最佳答案

这纯粹是作者更喜欢如何思考他们所代表的内容的问题。而且它通常更多的是所表示的“抽象概念”,而不是用来表示它的实际数据结构。

如果您有某种类型 X并想到 X值作为可以运行以获取值的计算,那么您将得到 runX功能。如果您认为它更像是一个容器,那么您将拥有一个 getX函数(还有其他可能的解释可能导致runXgetX或其他东西,这些只是思考值的两种常见的重复方式)。

当然,当我们使用一流的 Haskell 值来表示事物(并且函数是完美的值)时,很多时候您可以相当好地将某些东西解释为计算或容器。考虑State用于表示有状态计算; 当然必须将其解释为计算,对吧?我们说runState :: State s a -> s -> (a , s)因为我们认为它“运行”State s a ,需要 s作为附加输入。但我们可以很容易地将其视为“获得”s -> (a, s)State s a - 治疗State更像是一个容器。

所以选择runXgetX在任何深刻的时态下都没有真正的意义,但它告诉你作者是如何思考 X (也许他们认为你应该如何思考它)。

Const如此命名类似于函数 const (它接受一个参数来生成“常量函数”,该函数接受另一个输入,忽略它,并返回 const 的第一个输入是什么)。但它被认为是在类型级别上运行; Const接受一个类型并生成一个“类型级函数”,该函数忽略它所应用的任何类型,然后与第一个类型同构 Const被应用于.同构而不是相等,因为要创建一个可以具有不同实例的新类型,它需要有一个构造函数。在级别,为了成为同构,您需要能够获得 Const a b来自a (即 Const 构造函数),并获取 a退出Const a b 。由于“与 a 同构”是我们需要它拥有的所有属性,因此除了作为 a 的简单容器之外,没有真正需要将其视为执行任何其他操作。 ,所以我们有getConst .

Identity看起来与“只是一个容器”同样明显,我们有 runIdentity 。但拥有 Identity 的主要动机之一就是想到Identity aState s a 一样作为“一元计算” , Reader e a等值是。那么继续我们想到的类比Identity作为一个“什么都不做”的计算,我们运行,而不是我们从中获取值的简单包装容器。想到 Identity 是完全正确的。作为一个容器(最简单的容器),但这不是作者选择关注的解释。

关于haskell - 为什么 Haskell 中没有 runConst 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784275/

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