typeclass相关内容

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

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

在 F# 中,最接近 Haskell GADT 和类型类的是什么?

F# 是一个带有 OOP 的机器学习.与 Haskell 广义代数数据类型和类型类最接近的是什么? 解决方案 答案取决于您要解决的问题.F# 没有类型类和 GADT,因此没有直接映射.但是,F# 有多种机制可用于解决通常在 Haskell 中使用 GADT 和类型类解决的问题: 如果您想表示对象结构并能够添加具有不同行为的新具体实现,那么您通常可以使用标准的 OO 和接口. 如 ..
发布时间:2022-01-05 10:20:18 其他开发

Clojure 中的协议和多方法的多态性不如 Haskell 中的类型类强大的原因是什么?

更广泛地说,这个问题是关于表达问题的各种方法.这个想法是你的程序是数据类型和对它的操作的组合.我们希望能够在不重新编译旧类的情况下添加新案例. 现在 Haskell 有一些非常棒的解决方案来解决表达式问题 和 TypeClass.特别是 - 我们可以: class Eq a where(==) :: a ->->布尔值(/=) :: a ->->布尔值成员 :: (Eq a) =>->[a ..
发布时间:2022-01-02 22:46:58 其他开发

具有泛型参数类型的函数

我想弄清楚如何定义一个可以处理多种类型参数(例如 int 和 int64)的函数.据我了解,在 F# 中函数重载是不可能的(当然编译器会抱怨).以下面的函数为例. let sqrt_int = 函数|n:int ->int (sqrt (float n))|n:int64 ->int64 (sqrt (float n)) 编译器当然会抱怨语法无效(似乎不支持模式匹配中的类型约束),尽管我认为这 ..
发布时间:2021-12-15 09:49:02 其他开发

Haskell 什么时候需要类型签名?

许多介绍性文本会告诉您,在 Haskell 中,类型签名“几乎总是"是可选的.有人可以量化“几乎"的部分吗? 据我所知,您需要显式签名的唯一时候是消除类型类的歧义.(规范示例是 read . show.)还有其他我没有想到的情况吗,或者就是这样? (我知道如果你在 Haskell 2010 之后有很多例外.例如,GHC 永远不会推断出 rank-N 类型.但是 rank-N 类型是一种 ..
发布时间:2021-12-14 12:39:24 其他开发

为什么在 Haskell 中选择类型类实例时不考虑上下文?

我明白当有 instance (Foo a) =>酒吧实例 (Xyy a) =>酒吧 GHC 不考虑上下文,并且实例被报告为重复. 什么是违反直觉的,(我猜)在选择一个实例后,它仍然需要检查上下文是否匹配,如果不匹配,则丢弃该实例.那么为什么不颠倒顺序,丢弃具有不匹配上下文的实例,并继续处理剩余的集合. 这会以某种方式难以处理吗?我看到它如何预先导致更多的约束解析工作,但就像有 U ..
发布时间:2021-12-14 12:38:50 其他开发

“非法实例声明"声明 IsString 的实例时

我正在编写一个使用 UTF-16 字符串的应用程序,为了利用重载的字符串扩展,我尝试为它创建一个 IsString 实例: import Data.Word ( Word16 )导入 Data.String ( IsString(fromString) )类型 String16 = [Word16]实例 IsString [Word16] 其中fromString = encodeUTF16en ..
发布时间:2021-12-14 12:33:22 其他开发

OOP 接口和 FP 类型类的区别

可能的重复: Java 的接口和 Haskell 的类型类:区别和相似之处? 当我开始学习 Haskell 时,有人告诉我类型类与接口不同,而且功能更强大. 一年后,我广泛使用了接口和类型类,但我还没有看到有关它们有何不同的示例或解释.这要么不是自然而然的启示,要么我错过了一些明显的东西,或者实际上没有真正的区别. 在互联网上搜索并没有发现任何实质性的东西.所以,你有答案吗? ..
发布时间:2021-12-14 12:25:30 其他开发

没有 (Floating Int) 的实例

我正在学习 Haskell.我创建了一个函数,它在基数“b"中将乘法表返回到“n".数字被填充到“w"数字.作为最后一步,我想自动计算 'w'.为什么这不能编译? --base 'base' 中乘法表 n*n 所需的位数nOfDg :: Int ->内部->整数nOfDg n base = 1 + floor ( logBase base (n*n)) 错误: 没有 (Floating In ..
发布时间:2021-12-14 12:21:53 其他开发

Haskell 中的替代 ZipList 实例?

ZipList 带有一个 Functor 和一个 Applicative 实例 (Control.Applicative) 但为什么不Alternative? 没有好的实例吗? 下面推荐的那个呢? 它有缺陷吗? 没用吗? 是否有其他合理的可能性(比如 Bool 可以在两种方式中成为幺半群),因此它们都不应该是 实例? 我搜索了“instance Alternative ZipLis ..
发布时间:2021-12-14 12:21:44 其他开发

为什么要在 monad 中使用这种特殊的函数类型?

Haskell 的新手,我正在尝试弄清楚 Monad 的事情.monadic 绑定操作符——>>=——有一个非常奇特的类型签名: (>>=) :: Monad m =>m a ->(a -> m b) ->米 为了简化,让我们用 Maybe 代替 m: (>>=) :: 可能是 ->(a -> 也许 b) ->也许 b 但是,请注意定义可以以三种不同的方式编写: (>>=) :: 可能是 ..
发布时间:2021-12-14 12:21:20 其他开发

如何创建限定在一定范围内的类型

我想创建一个新的整数类型,它有一定的范围.我试过了: data PitchClass = PC Int deriving (Ord, Eq, Show)实例 Bounded PitchClass 其中minBound = PC 0最大边界 = PC 11 然而,我想要的是如果像这样的东西就会失败 PC 12 或 PC (-1) 正在尝试. 对于您希望对创建新类型设置约束的情况,是 ..
发布时间:2021-12-14 12:20:40 其他开发

在 Haskell 中,为什么没有一个 TypeClass 来处理可以像列表一样的东西?

我正在阅读 Learn You a Haskell 我想知道为什么这么多东西都像一个列表,并且 Prelude 中没有使用类型类的本机工具来设置它: " : 的字节串版本被称为 cons 它接受一个字节和一个字节串并将字节放在开头.虽然它很懒惰,所以即使字节串中的第一个块没有满,它也会创建一个新块. 这就是为什么如果要在字节串的开头插入大量字节,最好使用 cons, cons' 的严格版本. ..
发布时间:2021-12-14 12:12:45 其他开发

我如何将 Haskell 类型类转换为 F#?

我正在尝试将 Haskell 核心库的 Arrows 翻译成 F#(我认为这是更好地理解 Arrows 和 F# 的一个很好的练习,我也许可以在我正在从事的项目中使用它们.)但是,由于范式的不同,直接翻译是不可能的.Haskell 使用类型类来表达这些东西,但我不确定什么 F# 构造最能将类型类的功能与 F# 的习语映射起来.我有一些想法,但我认为最好在这里提出来,看看哪些被认为是最接近功能的. ..
发布时间:2021-12-14 12:11:56 其他开发

Java 的接口和 Haskell 的类型类:异同?

在学习 Haskell 时,我注意到它的类型类,这应该是源自 Haskell 的一项伟大发明. 但是,在维基百科页面上的类型类: 程序员通过指定一组函数或必须存在的常量名称及其各自的类型对于属于该类的每个类型. 对我来说这似乎与 Java 的接口相当接近(引用 维基百科的接口(Java)页): Java 编程语言中的接口是一种抽象类型用于指定接口(在术语的一般意义上)类必须 ..
发布时间:2021-12-14 12:08:53 Java开发

在 ghci 中查看特定类型的 Typeclass 定义

有没有办法在 ghci 中查看特定类型的 Typeclass 定义? 例如,Maybe 是这样定义的: instance Functor 也许在哪里fmap f (Just x) = Just (f x)fmap f 无 = 无 我可以在 ghci 中看到这个吗? 当我在 ghci 中使用 :info 时,我得到了这个: 前奏>:我可能是数据 也许 a = 没有 |只是一个 -- ..
发布时间:2021-12-14 12:07:12 其他开发

“替代"类型类中的“一些"和“许多"函数

Alternative 类型类中的 some 和 many 函数有什么用?文档提供一个我无法理解的递归定义. 解决方案 some 和 many 可以定义为: some f = (:) f 许多 f许多 f = 一些 f 纯的 [] 也许有助于了解 some 如何用 monadic do 语法编写: some f = dox 所以 some f 运行一次 f,然后“ma ..