相关疑难解决方法(0)

你可以在haskell超载吗?

虽然我在Haskell示例代码中看到了各种奇怪的东西 - 我从未见过运算符加上过载.它有什么特别之处吗?

假设我有类似Pair的类型,我希望有类似的东西

 Pair(2,4) + Pair(1,2) = Pair(3,6)
Run Code Online (Sandbox Code Playgroud)

可以一个人在哈斯克尔做吗?

我只是很好奇,因为我知道Scala可以以一种相当优雅的方式.

haskell

45
推荐指数
5
解决办法
2万
查看次数

类型安全矩阵乘法

在Haskell写这个Scala矩阵乘法的冗长讨论后,我想知道......类型安全矩阵乘法会是什么样的?所以这是你的挑战:要么链接到Haskell实现,要么自己实现,如下:

data Matrix ... = ...

matrixMult :: Matrix ... -> Matrix ... -> Matrix ...
matrixMult ... = ...
Run Code Online (Sandbox Code Playgroud)

matrixMult产生一个错误类型编译的时候,如果你试图乘两个matricies不兼容的尺寸.布朗尼指出,如果你链接到讨论这个精确主题的论文或书籍,和/或讨论自己这个功能是多么有用/无用.

haskell matrix matrix-multiplication

15
推荐指数
3
解决办法
2389
查看次数

Data.Map的合格导入与Prelude冲突

我想在我的代码中使用Prelude.mapData.Map.map用于不同的目的,但合格的导入Data.Map似乎没有帮助:

Prelude> import Data.Map as M
Prelude M> map

<interactive>:3:1:
    Ambiguous occurrence ‘map’
    It could refer to either ‘M.map’
                             imported from ‘Data.Map’
                             (and originally defined in ‘containers-0.5.0.0:Data.Map.Base’)
                          or ‘Prelude.map’
                             imported from ‘Prelude’ (and originally defined in ‘GHC.Base’)
Run Code Online (Sandbox Code Playgroud)

(我还拍了一个错误信息的截图,你可以在这里看到.)

我希望能够分别使用mapM.map; 我怎样才能做到这一点?

import haskell module compiler-errors

3
推荐指数
1
解决办法
155
查看次数

Haskell 中是否可以定义纯虚数类型?

我将在这里使用 C++ 作为示例来展示我所追求的内容。对于复数算术,它具有复数类型和虚数类型:

https://en.cppreference.com/w/c/language/arithmetic_types#Imaginary_floating_types

这些例如具有这样的属性:将两个数字与双虚数类型相乘将具有双精度类型。这与使用实部为 0.0 的复数几乎但不完全相同,但又不完全相同。虚数类型不会显式存储实部,这会自动消除不需要的计算和 0.0 的存储。

此外,它还可以防止带符号零的一些问题。例如,如果 a 和 b 为负,则 (0.0+i*a)*(0.0+i*b) 计算结果为 (-a*bi*0.0),否则为 (-a*b+i*0.0)。如果将结果输入到具有分支切割的函数中,这可能会令人惊讶。虚数类型避免了这种不必要的零否定。

我的问题是你能在 Haskell 中定义一个类似的虚数类型(除了复杂类型之外)以及操作(+), (-), (*), 和(/)for 它,这样它们的行为就像在 C++ 中一样?看来至少在NumFractional类的当前定义中这是不可能的,因为(+), (-), (*), 和(/)具有a -> a -> a类型签名,因此例如两个虚数相乘不能得到不同的类型。然而,是否可以对这些类有不同的定义,以便我所追求的目标成为可能?

我问这个并不是为了实际目的。我只是想更好地了解 Haskell 类型系统的功能。

haskell types

1
推荐指数
1
解决办法
220
查看次数

如何处理Haskell Prelude命名空间冲突?

如果我想使用readFilefrom Data.Text.IO,但是readFilePrelude中已经存在,我该如何导入它,这样就不会导致歧义错误?

我有一个脚本,只是说import Data.Text.IO,然后使用readFile,我正在ghci使用:load它测试它,但它抱怨模糊的函数调用.

haskell

0
推荐指数
1
解决办法
88
查看次数