algebraic-data-types相关内容
在 Haskell 中,是否可以编写一个带有签名的函数,该函数可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作? 一个例子可能会让我的问题更清楚.如果我有一个名为 myFunction 的函数,以及两个名为 MyTypeA 和 MyTypeB 的类型,我可以定义 myFunction 以便它只能接受 MyTypeA 或 MyTypeB 类型的数据作为它的第一个参数?
..
最近关于威廉库克融合的博文提到: 关键在于 Ensō 中的结构被视为整体的图表,而不是单个值或传统的总和和乘积数据结构. 他所指的传统 sums-and-products 数据结构是什么? 解决方案 他所指的传统 sums-and-products 数据结构是什么? 在类型理论中,常规数据结构可以用求和、乘积和递归类型来描述.这导致了用于描述数据结构(以及所谓的代数数
..
我试图找到对 DataKinds 扩展的解释,这对我来说很有意义,因为我只阅读了Learn You a Haskell.有没有一个标准来源可以让我对我所学到的一点点有意义? 编辑:例如文档说 使用 -XDataKinds,GHC 会自动提升每种合适的数据类型是一种,它的(值)构造函数是类型构造函数.以下类型 并给出例子 data Nat = Ze |苏纳特 产生以下种类和类型
..
我正在努力完全理解 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 中表示树或列表很容易.但是,您将如何以排版方式表示图形?看来你需要有指点.我猜你可能有类似的东西 type Nodetag = String类型邻居 = [节点标签]数据节点 a = 节点 a 节点标签邻居 这将是可行的.然而感觉有点脱钩;结构中不同节点之间的链接并没有真正“感觉"像列表中当前上一个和下一个元素之间或树中节点的父节点和子节点之间的链接那样牢固
..
如何找到在 Haskell 中存储某种数据类型的值所需的实际内存量(主要是使用 GHC)?是否可以在运行时(例如在 GHCi 中)对其进行评估,或者是否可以从其组件估计复合数据类型的内存需求? 一般来说,如果a和b类型的内存需求是已知的,那么代数数据类型的内存开销是多少,例如: data Uno = Uno a数据到期 = 到期 a b 例如,这些值在内存中占用了多少字节? 1 ::
..
想象一下,我有一个递归的代数数据类型,就像这样(Haskell 语法):> data Expr = 零|一|添加 Expr Expr|多表达式表达式 我想用 XML 表示它,我想用 XSD 架构来表示它. 我想出了如何实现这个语法:
..
所以我在打字稿中发现了一个技巧,通过将类型映射到键值对,然后使用 keyof类型.这是一个简单的例子: type SourceType ={富:数字,栏:字符串};输入 MapWithKey= {[P in keyof T]: { key: P, value: T[P] }}type DescriminatedUnion = MapWithKey[keyof SourceType];//Desc
..
如果我有一个看起来有点像这样的类型集合,那就更详细了: type ValidValues = string |数量 |空值类型 ValidTypes = "text" |“时间" |“未知"类型装饰 = {名称?:字符串 |空值类型?:有效类型值?:有效值标题:字符串开始:数字}注入类型 = {附加:对象}//覆盖装饰中的类型类型文本 = 装饰 &注射 &{名称:字符串类型:“文本"值:字符串}
..
对 Scala 的类型系统不是很熟悉,但这就是我想要做的. 我有一个函数尝试按名字和姓氏过滤人,如果失败则仅按名字过滤. case class Person(id: Int, first: String, last:String)def(people: Set[Person], firstName: String, lastName: String): (MatchResult, Set[
..
我正在设计带有 ADT 和 Aux-pattern 的类型安全代码并且无法摆脱一些 asInstanceOf.例子如下: 密封 trait Sourcecase 对象 FileSystem 扩展 Source案例对象网络扩展源密封性状数据{类型 S 列表(RegularFile("/tmp/test").asInstanceOf[Data.Aux[S]],Directory("/home/so
..
我正在尝试创建案例类,如 这篇文章 密封抽象案例类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 中是禁止的)
..
我需要引用结构深处的值,该结构包含嵌套在 struct 属性中的 Option,嵌套在 Result 中. 我目前的(工作)解决方案是: let raw = &packet[16..];匹配 PacketHeaders::from_ip_slice(raw) {Err(_value) =>{/* 忽略 */},好的(值)=>{匹配值.ip {Some(Version4(header))
..
Scala 可以在密封类型上的模式匹配不是详尽无遗时发出警告,但是我们可以检查函数是否在返回类型密封时返回所有情况?例如,考虑以下 ADT 密封性状 Foocase 对象 Bar 扩展了 Foocase 对象 Qux 扩展了 Foo 然后函数 f: Foo =>代数数据类型 Foo 上的字符串 def f(x: Foo): String = x match {案例栏 =>“酒吧"} 发出
..
不幸的是,从 0.9.5 开始,TypeScript(还)没有代数数据类型(联合类型)和模式匹配(用于解构它们).更重要的是,它甚至不支持接口上的 instanceof.您使用哪种模式来模拟具有最大类型安全性和最少样板代码的这些语言功能? 解决方案 TypeScript 1.4 添加了 联合类型和类型保护.
..
在大多数定义中,Haskell或Scala中常见或基本的代数数据类型为求和与乘积.示例: 1 ,初始代数.因此,原则上您可以用代数的方式调用函子中的任何东西,我认为这是一个很大的类. 将“代数"解释为“高中代数"(我并不是要屈尊,这只是指数对象,并且使用后一种表示法.有趣的是,看看是否可以证明定律 C A + B = C A ×C B ,方法是在相应类型之间写一个双射. 除法类似于商类型,
..
我具有以下表示卡的类型定义: data Suit = Hearts | Spades | Diamonds | Clubs data Rank = Numeric Integer | Jack | Queen | King | Ace data Card = Card Rank Suit data Deck = None | Cons Card Deck 数字整数代表2到10的等级.
..
在Scala中,我可以定义代数数据类型: scala> sealed trait Maybe[A] defined trait Maybe scala> case class Just[A](x: A) extends Maybe[A] defined class Just scala> case object NothingHere extends Maybe[Nothing] defin
..
据我了解,Haskell的递归数据类型对应于Hask类别[ 1 , 2 ].例如: 自然数data Nat = Zero | Succ Nat对应于endofunctor F(-) = 1 + (-)的初始代数. 列表data List a = Nil | Cons a (List a)对应于endofunctor F(A, -) = 1 + A × (-)的初始代数. 但是,我不清
..