gpt4 book ai didi

Haskell 类型和值构造函数

转载 作者:行者123 更新时间:2023-12-05 08:30:56 26 4
gpt4 key购买 nike

阅读一本书时我遇到了 Haskell Bool 类型

data Bool = True | False

据我了解,在这种情况下,True 和 False 是值,下面类型的表达式是有效的

c = True

后来,当我想创建一个新类型时,我忘了命名 Value 构造函数并创建了以下类型。

data Cartesian2D = Double Double

在这种情况下,Haskell (GHCI) 没有提示。

但是当我试图构造一个像

这样的值时
x = 1.0 2.0 

x = Double Double

在这两种情况下,Haskell 都返回了一个错误。

在这种情况下,

  1. Cartesian2D 类型是否有效?

  2. 如果类型无效,为什么在我构造类型时 Haskell 没有报错?但只在构造该类型的值时通知我。

最佳答案

True 这样的数据构造函数和像 Bool 这样的类型构造函数存在于不同的命名空间中。 Truenullary 构造函数的示例,不带任何参数。因此,定义

data Cartesian2D = Double Double

定义了一个名为Cartesian2D 的类型构造函数和一个名为Double一元 数据构造函数。非零数据构造函数的行为很像函数,接受参数以返回其关联类型的值。在这里,Double 的行为类似于 Double -> Cartesian2D 类型的函数(同样,请注意类型构造函数 Double 和类型构造函数 Double不同的)。

x = Double 1.0
y = Double 2.0

要创建存储两个 double 值的“真实”笛卡尔点类型,请尝试类似的方法

data Cartesian2D = Point Double Double

它定义了一个数据构造函数 Point,它采用两个 Double 类型的值来创建一个 Cartesian2D 类型的值。


如果您对 nullary 数据构造函数在某种程度上“特殊”地表现得不像函数(即,您不必调用 True,它只是 是一个值),您可以将 nullary 构造函数视为采用 () 类型的虚拟参数的一元构造函数的简写:

True :: Bool

的缩写
True () :: () -> Bool

否则必须始终将其用作 True ()

关于Haskell 类型和值构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61199050/

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