haskell相关内容

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

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

为什么将未定义函数与未装箱类型一起使用时是多态的?

我刚读完论文Levity Polymorphism. 我有一个问题,为什么 undefined 在用作未装箱类型时可以是 levity-polymorphic. 首先,让我们从论文中对 boxity 的一些定义开始: 盒装: 装箱值由指向堆的指针表示. Int 和 Bool 是具有 boxed 值的类型示例. 拆箱: 未装箱值由值本身表示(不是指向堆的指针 ..
发布时间:2022-01-24 16:32:54 其他开发

Haskell 如何处理重载多态性?

我有一个关于 Haskell 多态性的问题. 据我所知,有两种类型的多态性: 参数:不指定输入类型. 例子: 函数名 :: [a] ->一个 重载:作为命令式编程,即将不同的参数传递给同一个函数. 我的问题是:Haskell 如何处理重载? 解决方案 Haskell 中的重载是使用类型类完成的.例如,假设您要重载一个返回 Int 的函数 foo: class ..
发布时间:2022-01-24 16:31:17 其他开发

在 Haskell 中实现临时多态性的最佳方法是什么?

我有一个多态函数,例如: convert :: (Show a) =>一个->细绳convert = " [label=" ++ (显示一个) ++ "]" 但有时我想给它传递一个 Data.Map 并做一些更花哨的键值转换.我知道我不能在这里进行模式匹配,因为 Data.Map 是一种抽象数据类型(根据 this similar SO question),但我没有成功为此使用警卫,而且我不确 ..
发布时间:2022-01-24 16:30:31 其他开发

Haskell 的多态风格是什么?

使用 Haskell 的类型类,它似乎启用了即席多态,但它的函数声明似乎是参数多态.我是否混合了我对不同事物的理解? 解决方案 确实,Haskell 支持(更高级别的)参数多态性和 ad hoc(或 有界)多态性.Haskell 中的参数多态性通过其 Hindley-Milner/System F 类型系统得到支持.通过类型类支持临时多态性. 关于类型类和即席多态性的起源,请参阅 W ..

为什么 Haskell 的 `head` 会在一个空列表上崩溃(或者为什么 *不* 它返回一个空列表)?(语言哲学)

其他潜在贡献者请注意:请不要犹豫,使用抽象或数学符号来表达您的观点.如果我发现您的答案不清楚,我会要求您解释清楚,否则请随意以舒适的方式表达自己. 明确一点:我不是在寻找“安全的"head,head 的选择也不是特别有意义.问题的核心是关于 head 和 head' 的讨论,它们用于提供上下文. 我已经用 Haskell 破解了几个月了(以至于它已经成为我的主要语言),但我承认我对一些 ..
发布时间:2022-01-24 16:28:47 其他开发

如何轻松应对 Haskell 上的类型系统?

Haskell 的类型系统功能强大,因其数学严谨性和逻辑合理性而广受喜爱,另一方面,像下面这样幼稚的东西让我想知道为什么它不能按直觉预期工作? 例如为什么 Int 不能在 x3 上转换为 Num 但 f1 接受 Int反对签名Num? 前奏曲>让 x1 = 1前奏>:t x1x1 :: Num a =>一个前奏>让 x2 = 1 :: Int前奏>:t x2x2 :: 整数前奏>让 x3 ..
发布时间:2022-01-24 16:27:47 其他开发

什么是“n"?在 RankNTypes 中

我了解 forall 是如何让我们编写多态函数的. 根据这个章节,我们一般写的普通函数是Rank 1类型.而这个函数是Rank 2类型的: foo :: (forall a.a -> a) ->(字符,布尔)foo f = (f 'c', f True) 它是这样解释的: 一般来说,rank-n 类型是一个函数,它至少有一个rank-(n-1) 参数,但没有更高级别的参数. ..
发布时间:2022-01-24 16:21:40 其他开发

优化 Haskell 中的数值数组性能

我正在为类似 MineCraft 的世界开发地形生成算法.目前,我正在使用基于论文 'Simplex NoiseDemystified' [PDF],因为单纯形噪声应该比 Perlin 噪声更快并且具有更少的伪影.这看起来相当不错(见图),但到目前为止它也很慢. 运行噪声函数 10 次(我需要具有不同波长的噪声来处理地形高度、温度、树木位置等),每个块(16x16x128 块)的噪声为 3 ..

Haskell 中存在与普遍量化的类型

这些之间究竟有什么区别?我想我理解存在类型是如何工作的,它们就像在 OO 中有一个基类,没有办法进行向下转换.通用类型有何不同? 解决方案 这里的术语“普遍"和“存在"来自谓词逻辑. 通用量化通常写成∀,可以读作“for all",大致意思是听起来像:在类似于“∀x...."的逻辑语句中,任何代替“..."的东西对于所有可能的“x"都是正确的,您可以从被量化的任何一组事物中进行选择. ..
发布时间:2022-01-24 16:17:35 其他开发

参数多态性 vs Ad-hoc 多态性

我想了解参数多态性(例如 Java/Scala/C++ 语言中泛型类/函数的多态性)与 Haskell 类型系统中的“临时"多态性之间的主要区别.我熟悉第一种语言,但我从未使用过 Haskell. 更准确地说: 类型推断算法如何?Java 中的类型推断与 Haskell 中的类型推断有何不同? 请给我一个例子,说明可以用 Java/Scala 编写但不能用 Haskell 编写的情况 ..
发布时间:2022-01-24 16:10:39 Java开发

哪些类型的问题有助于“更高种类的多态性"?解决更好?

当我阅读 Haskell 的历史,我遇到过: 但是,更高种类的多态性具有独立的效用:完全可以,并且有时非常有用,可以声明在更高种类上参数化的数据类型,例如: 数据 ListFunctor f a = Nil |缺点 a (f a) 了解“基本"ADT 我在这里有点困惑,我的“猜测"是括号中的部分暗示了一个“参数"/“动态"一元数据构造函数 f?所以任何类型的数据构造函数 * ->* “可 ..
发布时间:2022-01-24 16:09:33 其他开发

Java中的高级泛型

假设我有以下课程: 公共类 FixExpr {Expr在;} 现在我想介绍一个通用参数,对 Expr 的使用进行抽象: public class Fix{F>在;} 但 Eclipse 不喜欢这样: 类型 F 不是泛型的;它不能用参数 > 这是否可能,或者我是否忽略了导致此特定实例中断的某些内容? 一些背景信息:在 Haskel ..
发布时间:2022-01-24 16:01:59 Java开发

Scala:如何定义“通用";函数参数?

我现在正在尝试学习 Scala,在 Haskell 方面有一点经验.对我来说很奇怪的一件事是 Scala 中的所有函数参数 必须 使用类型进行注释——这是 Haskell 不需要的.为什么是这样?举个更具体的例子:一个 add 函数是这样写的: def add(x:Double, y:Double) = x + y 但是,这只适用于双精度数(嗯,整数也适用,因为隐式类型转换).但是,如果您想定 ..
发布时间:2022-01-24 15:56:33 其他开发

人们使用身份功能做什么?

例如,Haskell 有 id 函数,Julia 有 identity 函数,SO 的很多问题都涉及到identity 函数.(我想在 Python 中你可以做 lambda x:x) 我一直在绞尽脑汁想这个功能的用例;我失败了. 身份函数的目的是什么,它的常见用例是什么? 解决方案 请记住,在 Haskell 中,函数是一等值,可以像其他值一样用作数据,并作为参数传递给其他函 ..
发布时间:2022-01-23 19:05:15 其他开发