haskell相关内容
在 Haskell 中,是否可以编写一个带有签名的函数,该函数可以接受两种不同(尽管相似)的数据类型,并根据传入的类型进行不同的操作? 一个例子可能会让我的问题更清楚.如果我有一个名为 myFunction 的函数,以及两个名为 MyTypeA 和 MyTypeB 的类型,我可以定义 myFunction 以便它只能接受 MyTypeA 或 MyTypeB 类型的数据作为它的第一个参数?
..
我刚读完论文Levity Polymorphism. 我有一个问题,为什么 undefined 在用作未装箱类型时可以是 levity-polymorphic. 首先,让我们从论文中对 boxity 的一些定义开始: 盒装: 装箱值由指向堆的指针表示. Int 和 Bool 是具有 boxed 值的类型示例. 拆箱: 未装箱值由值本身表示(不是指向堆的指针
..
我有一个关于 Haskell 多态性的问题. 据我所知,有两种类型的多态性: 参数:不指定输入类型. 例子: 函数名 :: [a] ->一个 重载:作为命令式编程,即将不同的参数传递给同一个函数. 我的问题是:Haskell 如何处理重载? 解决方案 Haskell 中的重载是使用类型类完成的.例如,假设您要重载一个返回 Int 的函数 foo: class
..
我有一个多态函数,例如: convert :: (Show a) =>一个->细绳convert = " [label=" ++ (显示一个) ++ "]" 但有时我想给它传递一个 Data.Map 并做一些更花哨的键值转换.我知道我不能在这里进行模式匹配,因为 Data.Map 是一种抽象数据类型(根据 this similar SO question),但我没有成功为此使用警卫,而且我不确
..
使用 Haskell 的类型类,它似乎启用了即席多态,但它的函数声明似乎是参数多态.我是否混合了我对不同事物的理解? 解决方案 确实,Haskell 支持(更高级别的)参数多态性和 ad hoc(或 有界)多态性.Haskell 中的参数多态性通过其 Hindley-Milner/System F 类型系统得到支持.通过类型类支持临时多态性. 关于类型类和即席多态性的起源,请参阅 W
..
其他潜在贡献者请注意:请不要犹豫,使用抽象或数学符号来表达您的观点.如果我发现您的答案不清楚,我会要求您解释清楚,否则请随意以舒适的方式表达自己. 明确一点:我不是在寻找“安全的"head,head 的选择也不是特别有意义.问题的核心是关于 head 和 head' 的讨论,它们用于提供上下文. 我已经用 Haskell 破解了几个月了(以至于它已经成为我的主要语言),但我承认我对一些
..
Haskell 的类型系统功能强大,因其数学严谨性和逻辑合理性而广受喜爱,另一方面,像下面这样幼稚的东西让我想知道为什么它不能按直觉预期工作? 例如为什么 Int 不能在 x3 上转换为 Num 但 f1 接受 Int反对签名Num? 前奏曲>让 x1 = 1前奏>:t x1x1 :: Num a =>一个前奏>让 x2 = 1 :: Int前奏>:t x2x2 :: 整数前奏>让 x3
..
从 monad 出来的函数的类型发生了一些变化. 在 GHCI 中: >:t 地图地图 :: (a -> b) ->[一]->[乙]>a :ta :: (GHC.Prim.Any -> GHC.Prim.Any)->[GHC.Prim.Any] ->[GHC.Prim.Any] 此更改使函数难以存储在更高级别的类型中. 这里发生了什么,我可以让它不发生吗? (
..
这不是类型检查: 模块不类型检查 where {导入前奏(要么(..));defaultEither :: a ->b c ->要么 c;defaultEither a (Left _) = Left a;defaultEither _ b = b;} 但这确实: 模块 DoesTypeCheck where {导入前奏(要么(..));defaultEither :: a ->b c ->
..
我了解 forall 是如何让我们编写多态函数的. 根据这个章节,我们一般写的普通函数是Rank 1类型.而这个函数是Rank 2类型的: foo :: (forall a.a -> a) ->(字符,布尔)foo f = (f 'c', f True) 它是这样解释的: 一般来说,rank-n 类型是一个函数,它至少有一个rank-(n-1) 参数,但没有更高级别的参数.
..
我正在为类似 MineCraft 的世界开发地形生成算法.目前,我正在使用基于论文 'Simplex NoiseDemystified' [PDF],因为单纯形噪声应该比 Perlin 噪声更快并且具有更少的伪影.这看起来相当不错(见图),但到目前为止它也很慢. 运行噪声函数 10 次(我需要具有不同波长的噪声来处理地形高度、温度、树木位置等),每个块(16x16x128 块)的噪声为 3
..
这些之间究竟有什么区别?我想我理解存在类型是如何工作的,它们就像在 OO 中有一个基类,没有办法进行向下转换.通用类型有何不同? 解决方案 这里的术语“普遍"和“存在"来自谓词逻辑. 通用量化通常写成∀,可以读作“for all",大致意思是听起来像:在类似于“∀x...."的逻辑语句中,任何代替“..."的东西对于所有可能的“x"都是正确的,您可以从被量化的任何一组事物中进行选择.
..
我想了解参数多态性(例如 Java/Scala/C++ 语言中泛型类/函数的多态性)与 Haskell 类型系统中的“临时"多态性之间的主要区别.我熟悉第一种语言,但我从未使用过 Haskell. 更准确地说: 类型推断算法如何?Java 中的类型推断与 Haskell 中的类型推断有何不同? 请给我一个例子,说明可以用 Java/Scala 编写但不能用 Haskell 编写的情况
..
当我阅读 Haskell 的历史,我遇到过: 但是,更高种类的多态性具有独立的效用:完全可以,并且有时非常有用,可以声明在更高种类上参数化的数据类型,例如: 数据 ListFunctor f a = Nil |缺点 a (f a) 了解“基本"ADT 我在这里有点困惑,我的“猜测"是括号中的部分暗示了一个“参数"/“动态"一元数据构造函数 f?所以任何类型的数据构造函数 * ->* “可
..
..
假设我有以下课程: 公共类 FixExpr {Expr在;} 现在我想介绍一个通用参数,对 Expr 的使用进行抽象: public class Fix{F>在;} 但 Eclipse 不喜欢这样: 类型 F 不是泛型的;它不能用参数 > 这是否可能,或者我是否忽略了导致此特定实例中断的某些内容? 一些背景信息:在 Haskel
..
..
我现在正在尝试学习 Scala,在 Haskell 方面有一点经验.对我来说很奇怪的一件事是 Scala 中的所有函数参数 必须 使用类型进行注释——这是 Haskell 不需要的.为什么是这样?举个更具体的例子:一个 add 函数是这样写的: def add(x:Double, y:Double) = x + y 但是,这只适用于双精度数(嗯,整数也适用,因为隐式类型转换).但是,如果您想定
..
..
例如,Haskell 有 id 函数,Julia 有 identity 函数,SO 的很多问题都涉及到identity 函数.(我想在 Python 中你可以做 lambda x:x) 我一直在绞尽脑汁想这个功能的用例;我失败了. 身份函数的目的是什么,它的常见用例是什么? 解决方案 请记住,在 Haskell 中,函数是一等值,可以像其他值一样用作数据,并作为参数传递给其他函
..