algebraic-data-types相关内容

是否有使用代数数据类型或多态性的 OOP 抽象类的 Haskell 等价物?

在 Haskell 中,是否可以编写一个带有签名的函数,该函数可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作? 一个例子可能会让我的问题更清楚.如果我有一个名为 myFunction 的函数,以及两个名为 MyTypeA 和 MyTypeB 的类型,我可以定义 myFunction 以便它只能接受 MyTypeA 或 MyTypeB 类型的数据作为它的第一个参数? ..

什么是“总和与积"?数据结构?

最近关于威廉库克融合的博文提到: 关键在于 Ensō 中的结构被视为整体的图表,而不是单个值或传统的总和和乘积数据结构. 他所指的传统 sums-and-products 数据结构是什么? 解决方案 他所指的传统 sums-and-products 数据结构是什么? 在类型理论中,常规数据结构可以用求和、乘积和递归类型来描述.这导致了用于描述数据结构(以及所谓的代数数 ..

Haskell 的 DataKinds 扩展是什么?

我试图找到对 DataKinds 扩展的解释,这对我来说很有意义,因为我只阅读了Learn You a Haskell.有没有一个标准来源可以让我对我所学到的一点点有意义? 编辑:例如文档说 使用 -XDataKinds,GHC 会自动提升每种合适的数据类型是一种,它的(值)构造函数是类型构造函数.以下类型 并给出例子 data Nat = Ze |苏纳特 产生以下种类和类型 ..
发布时间:2021-12-14 12:30:28 其他开发

Haskell 的代数数据类型

我正在努力完全理解 Haskell 的所有概念. 代数数据类型在哪些方面与泛型类型相似,例如在 C# 和 Java 中?它们有何不同?无论如何,它们有什么代数性? 我熟悉泛代数及其环和域,但我对 Haskell 的类型如何工作只有一个模糊的概念. 解决方案 Haskell 中的“Algebraic Data Types"支持全参数多态,这是泛型在技术上更正确的名称,作为一个简单 ..

滥用代数数据类型的代数 - 为什么这样做?

代数数据类型的“代数"表达式对于具有数学背景的人来说非常具有启发性.让我试着解释一下我的意思. 定义基本类型 产品• 联合+ 单例X 单元 1 并使用速记 X² 表示 X•X 和 2X 表示 X+X 等等,我们然后可以定义代数表达式,例如链表 data List a = Nil |Cons a (List a) ↔ L = 1 + X • L 和二叉树: ..

你如何在 Haskell 中表示图形?

使用代数数据类型在 haskell 中表示树或列表很容易.但是,您将如何以排版方式表示图形?看来你需要有指点.我猜你可能有类似的东西 type Nodetag = String类型邻居 = [节点标签]数据节点 a = 节点 a 节点标签邻居 这将是可行的.然而感觉有点脱钩;结构中不同节点之间的链接并没有真正“感觉"像列表中当前上一个和下一个元素之间或树中节点的父节点和子节点之间的链接那样牢固 ..

Haskell 数据类型的内存占用

如何找到在 Haskell 中存储某种数据类型的值所需的实际内存量(主要是使用 GHC)?是否可以在运行时(例如在 GHCi 中)对其进行评估,或者是否可以从其组件估计复合数据类型的内存需求? 一般来说,如果a和b类型的内存需求是已知的,那么代数数据类型的内存开销是多少,例如: data Uno = Uno a数据到期 = 到期 a b 例如,这些值在内存中占用了多少字节? 1 :: ..
发布时间:2021-12-14 11:32:30 其他开发

如何查看 Typescript 类型的完整扩展合同?

如果我有一个看起来有点像这样的类型集合,那就更详细了: type ValidValues = string |数量 |空值类型 ValidTypes = "text" |“时间" |“未知"类型装饰 = {名称?:字符串 |空值类型?:有效类型值?:有效值标题:字符串开始:数字}注入类型 = {附加:对象}//覆盖装饰中的类型类型文本 = 装饰 &注射 &{名称:字符串类型:“文本"值:字符串} ..
发布时间:2021-09-11 20:20:24 其他开发

如果禁止case类继承,如何表示?

我正在尝试创建案例类,如 这篇文章 密封抽象案例类Exp()case class Literal(x:Int) extends Expcase class Add(a:Exp, b:Exp) extends Expcase class Sub(a:Exp,b:Exp) 扩展 Exp 但是,我在 IntelliJ 中收到以下错误.我理解为什么它被禁止(为什么要逐案继承在 Scala 中是禁止的) ..
发布时间:2021-07-15 19:37:01 其他开发

返回类型密封时的主观性检查

Scala 可以在密封类型上的模式匹配不是详尽无遗时发出警告,但是我们可以检查函数是否在返回类型密封时返回所有情况?例如,考虑以下 ADT 密封性状 Foocase 对象 Bar 扩展了 Foocase 对象 Qux 扩展了 Foo 然后函数 f: Foo =>代数数据类型 Foo 上的字符串 def f(x: Foo): String = x match {案例栏 =>“酒吧"} 发出 ..

你如何在 TypeScript 中模拟 ADT 和模式匹配?

不幸的是,从 0.9.5 开始,TypeScript(还)没有代数数据类型(联合类型)和模式匹配(用于解构它们).更重要的是,它甚至不支持接口上的 instanceof.您使用哪种模式来模拟具有最大类型安全性和最少样板代码的这些语言功能? 解决方案 TypeScript 1.4 添加了 联合类型和类型保护. ..
发布时间:2021-06-14 20:16:38 其他开发

总和和积之外是否存在代数数据类型?

在大多数定义中,Haskell或Scala中常见或基本的代数数据类型为求和与乘积.示例: 1 ,初始代数.因此,原则上您可以用代数的方式调用函子中的任何东西,我认为这是一个很大的类. 将“代数"解释为“高中代数"(我并不是要屈尊,这只是指数对象,并且使用后一种表示法.有趣的是,看看是否可以证明定律 C A + B = C A ×C B ,方法是在相应类型之间写一个双射. 除法类似于商类型, ..
发布时间:2021-05-13 20:39:47 其他开发