小编yon*_*ong的帖子

使用镜头作为`map`

我想将这行代码转换map (^?! ix 0) [[0, 1], [4, 5], [9, 1]]成完全使用镜头,所以像[[0, 1], [4, 5], [9, 1]] & each . ix 0.但是,类型不匹配.这样做的正确方法是什么?

haskell lenses

8
推荐指数
2
解决办法
195
查看次数

为什么WrappedMonad和WrappedArrow?

为什么存在WrappedMonadWrappedArrow类型?是因为Monads不是Applicative吗?鉴于WrappedArrow存在,应该是实例

Arrow a => Applicative (Arrow a b) 
Run Code Online (Sandbox Code Playgroud)

简单地构建到Haskell本身就像Applicative现在的超类一样Monad

haskell applicative newtype

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

对于小型矩阵,纯Haskell比HMatrix快10倍-100倍?

我们将大部分CPU周期用于涉及小矩阵的操作,因此我想知道是否可以针对该情况进行优化.请考虑以下代码:

module Main where

import Numeric.LinearAlgebra.HMatrix
import Criterion.Main


data Matrix2x2 = Matrix2x2 {-# UNPACK #-} !Double !Double !Double !Double

mul2x2p :: Matrix2x2 -> Matrix2x2 -> Matrix2x2
mul2x2p (Matrix2x2 a1 b1 c1 d1) (Matrix2x2 a2 b2 c2 d2) =
  Matrix2x2 (a1*a2 + b1*c2) (a1*b2 + b1*d2) (c1*a2 + d1*c2) (c1*b2 + d1*d2)

inv2x2 :: Matrix2x2 -> Matrix2x2
inv2x2 (Matrix2x2 a b c d) =
  let detInv = a * d - b * c
  in Matrix2x2 (d / detInv) (-b / …
Run Code Online (Sandbox Code Playgroud)

performance haskell matrix

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

GADT的makeLenses(Haskell)

是否有相当于makeLensesGADT?如果我有一个简单的GADT:

data D a b where
  D :: (Ord a, Ord b) => !a -> !b -> D a b
Run Code Online (Sandbox Code Playgroud)

有没有办法通过传入构造函数和字段名称列表自动生成镜头?

haskell gadt lenses

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

在Haskell中的结构共享矢量

Vector在Haskell结构共享?在Clojure中,修改(immutable)vector只需要O(log n)时间,因为它实际上是一个类似trie的结构.(http://hypirion.com/musings/understanding-persistent-vector-pt-1)

在Haskell中是否有相同的实现?

haskell clojure

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

试图通用时“特征的实现冲突”

背景:我正在使用该nalgebra库,我想创建一个表示多元正态分布的结构。M是矩阵的类型,例如Mat4<f64>

\n\n

我当前的尝试如下所示:

\n\n
use std::ops::Mul;\nuse std::marker::PhantomData;\nuse nalgebra::*;\n\n#[allow(non_snake_case)]\npub struct Multivar<N, V, M: SquareMat<N, V>> {\n    \xce\xbc: V,\n    \xce\xa3: M,\n    marker: PhantomData<N>\n}\n\nimpl<N, V, M> Mul<Multivar<N, V, M>> for M {\n    type Output = Multivar<N, V, M>;\n    fn mul(self, rhs: Multivar<N, V, M>) -> Multivar<N, V, M> {\n        Multivar {\n            \xce\xbc: self * rhs.\xce\xbc,\n            \xce\xa3: self * rhs.\xce\xa3 * transpose(&self)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,编译器抱怨:

\n\n

error: type parameter `M` must be used as the type parameter …

types rust

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

在Rust中将f64舍入到最近的i64

Rust的f64类型提供了函数round(),它舍入到最接近的整数,但它返回一个f64.Math.round(double)另一方面,Java会返回一个long.我可以打电话round()然后再投i64,但这能保证我得到正确的结果吗?在这里,"正确"意味着获得最接近的i64- Java round()返回"最接近的长".

floating-point precision rust

6
推荐指数
2
解决办法
1200
查看次数

Haskell性能:手动无盒装列表?

根据Haskell文档,您不能将原始值传递给多态函数或将其存储在多态数据类型中.这排除了[Int#]之类的东西.

创建自定义列表实现是否有意义,比如说IntList,这只是专门用于Ints 的列表类型?一个人已经存在吗?

performance haskell

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

如何创建融合的Haskell容器?

我有兴趣创建一个新的Haskell容器类型(严格列表),我想确保它们上的操作符合流融合的条件.如何选择ghc的流融合功能?

如果我的容器是Traversable,它会自动融合吗?如果我实现了,说mapAccumL来讲toList,将哈斯克尔足够聪明,不是容器转换到一个列表所有,而不是简单地对底层表示操作?

haskell stream-fusion

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

将(0,1)更改为(0,1)而不进行分支

我有一个输出值的随机数生成器(0, 1],但是我需要将输出提供给一个在0或1处返回无穷大的函数.如何在(0, 1)没有任何分支的情况下对生成的数字进行后处理,因为这是为了在GPU上执行?

我想一种方法是添加一个小常数然后取值mod 1.换句话说,生成from (?, 1 + ?],变成了[?, 1).有没有更好的办法?应该?是什么?

random floating-point haskell

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