问题标签 [value-constructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 值构造函数和元组有什么区别?
它写道,Haskell 元组只是代数数据类型的不同语法。类似地,也有如何用元组重新定义值构造函数的示例。
例如,Haskell 中的 Tree 数据类型可以写为
可以像这样转换为“元组形式”:
Node
第一个示例中的值构造函数与第二个示例中的实际构造函数有什么区别tuple
?即Node a (Tree a) (Tree a)
与(a, Tree a, Tree a)
(除了语法)?
在幕后,Node a (Tree a) (Tree a)
每个位置的适当类型的 3 元组只是不同的语法吗?
我知道您可以部分应用值构造函数,例如Node 5
将具有类型:(Node 5) :: Num a => Tree a -> Tree a -> Tree a
您也可以部分应用元组,将(,,)
其用作函数......但这不知道未绑定条目的潜在类型,例如:
除非,我猜,你明确声明了一个类型::
。
除了像这样的语法特性,加上最后一个类型作用域的例子,Haskell 中的“值构造函数”实际上是什么,与用于存储相同类型的位置值的元组是值构造函数之间是否存在实质性区别?论据?
haskell - 为什么我可以使用我的值构造函数,即使我不导出它?
为了练习,我在一个名为“Queue”的模块中实现了一个队列数据类型。我的数据类型也称为“队列”,它唯一的值构造函数也是如此:
据我了解,因为我在导出语句中写了Queue
, not Queue(..)
or Queue(Queue)
,所以我不希望我的数据类型的值构造函数被模块导出。这正是我想要的,出于封装目的:用户不应该直接使用值构造函数;只有emptyQueue
, enq
, 和我界面中的其他功能。
但是(对于经验丰富的 Haskeller 来说,我的问题的解决方案可能很明显),如果我在 GHCi 中加载我的模块,我可以直接使用值构造函数。
如上所述,这是不希望的。我究竟做错了什么?
haskell - 具有默认字段的数据类型,并且需要使用它的函数
说,我有一个数据类型
我需要创建这种类型的值并将空列表作为第二个字段:
或者
1)我在我的代码中到处都这样做,我认为如果我能以某种方式省略空列表部分并隐式分配空列表会很好。这可能吗?类似于其他语言中的默认函数参数。
2)由于这个[]
“默认”值,我经常需要有一个部分构造函数应用程序,它会产生一个采用前两个值的函数:
是否有“更好”(更惯用等)的方法来做到这一点?避免定义新功能?
3)我需要一种将东西添加到列表中的方法:
这是惯用的方式吗?只是一个通用功能?
如您所见,我是初学者,所以也许这些问题没有多大意义。希望不是。
haskell - 为什么在值构造函数中声明的类型不是 Haskell 中的类型?
假设我有以下值构造函数:
现在我可以运行:
现在我可以写一个类型声明
但我不能输入类型声明
这是因为“Circle
不是类型,Shape
是”
我的问题是:为什么在值构造函数中声明的类型不是 Haskell 中的类型?
templates - 定义独立于特定值构造函数的函数(模板?)
是否可以在不假设类型构造函数的名称的情况下为泛型类型(在本例中为应用程序)编写函数?
我可以写以下内容:
那一个适用于Maybe
s 并且仅适用于Just
构造函数的实例。
但是假设我有不同的类型,它们的值构造函数与类型构造函数同名:
在这种情况下T
和U
是同构的,但也许它们也将具有对真实示例中的任何一个都是特殊的构造函数......在这里无关紧要。
现在,如果想要一个同时在T
和U
...上运行的函数怎么办?我可以将函数编写两次,如下所示:
有没有办法像这样为这个函数制作模板?
出于某种原因,这会给我一个语法错误,即使它与 and 具有相同的gt
结构gu
。
如果没有办法做到这一点,那为什么不呢?
default-constructor - 默认和值构造的对象具有不同的类型
考虑以下代码,其中构造了一个变量默认值并构造了另一个值:
使用 GCC 4.8,输出为
一个
一个 ()
一个
因此a,c
,b
尽管它们引用相同的结构/类,但它们具有不同的类型。怎么会这样?
(当然,这是一个从复杂代码问题派生的最小示例。在那里,我得到了类似A
vs的东西,A(int)
但我还不能重现它。)
list - haskell 中的值构造函数
我有一个关于 Haskell 的问题。我是新手,所以我不太了解,但是如果有人可以帮助我,我将不胜感激。我从我买的一本书中得到了这个练习。
使用值构造器Sim或Nao创建类型Question。创建一个函数:
- listQuest:从参数接收问题列表,并为Nao返回0 ,或为Sim返回1 ,对应列表中的构造函数。
我试过这段代码:
我迷失在迅速的事情中。不知道写什么来使用这个功能。
谢谢您的帮助
haskell - 如何定义一个函数,该函数采用数据类型的自然数并返回它们的总和?
我仍在学习价值构造函数的工作原理。我阅读了很多关于数据类型及其值构造函数的内容。问题是我在实践中从未见过它们。例如
现在,如果我们想定义一个函数,它接受两个 Nat 输入并返回乘积,我们该怎么做呢?如果我们想使用运算符 *,我们必须将它们转换为 Haskell 积分。如果我们想要实现一个需要两个 Nat 的 mult 函数,它应该将它们相乘而不将它们转换为 Haskel 积分,那会是什么样子?
我真的还没有得到数据类型|值构造函数。谁能从上面的数据 Nat 示例中说明如何正确使用此类值构造函数?
haskell - 在 Haskell 中使用值构造函数
我非常坚持这个练习,程序应该收到如下输入:
然后输出类似:
我试过这个:
但是我在终端上遇到了这个错误:
我得到的最近似的工作代码是下面的代码,但是用户必须输入 Ok 或 Error 才能进行操作,什么是真正的解决方法:
我想知道一种直接接收数字而不是接收值构造函数的更好方法。