小编fho*_*fho的帖子

如何描述图书馆?

是否有任何隐藏的选项将成本中心放入图书馆?目前我已经设置了这样的分析:

阴谋:

ghc-prof-options:    -O2                                                                                                                                                                                                                   
                    -threaded                                                                                                                                                                                                             
                    -fexcess-precision                                                                                                                                                                                                    
                    -fprof-auto                                                                                                                                                                                                                                                                                                                                                                                                                     
                    -rtsopts                                                                                                                                                                                                              
                    "-with-rtsopts=-N -p -s -h -i0.1"        
Run Code Online (Sandbox Code Playgroud)

EXEC:

# cabal sandbox init
# cabal install --enable-library-profiling --enable-executable-profiling
# cabal configure --enable-library-profiling --enable-executable-profiling
# cabal run
Run Code Online (Sandbox Code Playgroud)

这可以在程序完成时创建预期的.prof文件,.hp文件和摘要.

问题是该.prof文件不包含任何不属于当前项目的内容.我的猜测是,可能有一个选项可以将成本中心放在外部库代码中?

haskell cabal

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

为什么引入相关类型会影响我的表现?

在我的kdtree项目,我刚刚更换被深度计数器Int为基础的,以一个明确的Key a基础上,类型aKDTree v a.这是差异.

现在,虽然我认为这应该是类型级别的更改,但我的基准测试显示性能急剧下降:

之前:

benchmarking nr/kdtree_nr 
mean: 60.19084 us, lb 59.87414 us, ub 60.57270 us, ci 0.950
std dev: 1.777527 us, lb 1.494657 us, ub 2.120168 us, ci 0.950
Run Code Online (Sandbox Code Playgroud)

后:

benchmarking nr/kdtree_nr 
mean: 556.9518 us, lb 554.0586 us, ub 560.6128 us, ci 0.950 
std dev: 16.70620 us, lb 13.58185 us, ub 20.63450 us, ci 0.950
Run Code Online (Sandbox Code Playgroud)

在我深入Core之前......任何人都知道这里发生了什么?

编辑1

所建议的托马斯(和userxyz)我取代data Key a :: *与 …

haskell type-families associated-types

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

如何从有向非循环图中导出FRP?

我正在研究我的下一个项目.这是一个预先规划阶段,所以这个问题只是为了对现有技术进行概述.

建立

我有一个有多个输入和输出的有向无环图(DAG),现在想想人工神经网络:

有向无环图

处理这种结构的常用方法是在每个(时间)步骤处理整个网络.我相信这是frp库使用的方法,比如netwire.

现在我处于幸运的位置,我有一个事件流,每个事件都在一个输入节点中呈现变化.我的想法是,如果我可以静态地知道给定的更改只会影响其中的一部分,我可能不需要步进网络中的每个节点.

在上面的图像中,5,7和3是输入,11和8是"隐藏的",2,9和10是输出节点.节点5处的改变将仅影响节点11并且实际上影响节点2,9和10.我将不需要处理节点7,3和8.

目标

以尽可能小的延迟处理这种网络.图形的大小可能达到100k节点,每个节点进行适量的计算.

计划

我希望有人会站出来宣传图书馆X,只是完成工作.

否则,我当前的计划是从图形描述中导出每个输入节点的计算.可能我会使用Parmonad,这样我就不必自己处理数据依赖,仍然可以从多核机器中受益.

问题

  • 是否有任何图书馆可以满足我的需求?
  • 我的Par计划可行吗?这取决于每个节点所需的处理量?

haskell frp directed-acyclic-graphs

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

如何使fmap重写规则触发?

简单问题:为什么不触发重写规则?

{-# RULES "fmap/fmap" forall f g xs. fmap f (fmap g xs) = fmap (f.g) xs #-}

main = do
  txt <- fmap head (fmap words (readFile "foo.txt"))
  print txt
Run Code Online (Sandbox Code Playgroud)

现在我想写一个提取fun触发规则,因为它在之前的测试中做了...不是这次.

{-# RULES "fmap/fmap" forall f g xs. fmap f (fmap g xs) = fmap (f.g) xs #-}

fun f g xs = fmap f (fmap g xs)

main = do
  txt <- fun (drop 1) words (readFile "foo.txt")
  print txt
Run Code Online (Sandbox Code Playgroud)

直到我偶然添加了一个模块名称:

module Main where

{-# RULES …
Run Code Online (Sandbox Code Playgroud)

haskell

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

haskellmode-vim死了吗?

我刚刚haskellmode-vim从我的插件配置中禁用.基本上这有三个原因:

  1. 我更喜欢neocomplcache我的自动完成需求.
  2. 显然它自2010年以来没有更新.
  3. 它似乎不兼容 cabal

我希望有人跳进坑中并指出我只是错误配置了整个事情(就像我在自述文件中配置了最基本的东西).提出这个问题:

是否可以设置haskellmode,以便......

  • ...它从cabal得到它的配置?
  • ...它没有设置`completefunc'以便neocomplcache仍然可以工作?

vim haskell haskell-mode

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

Travis ci是否允许大于7.8的ghc版本?

我刚刚创建了一个Haskell Travis CI项目.travis.yml:

language: haskell
ghc:
  - 7.8
  - 7.10
Run Code Online (Sandbox Code Playgroud)

但特拉维斯将第二个版本解释为7.1:https://travis-ci.org/fhaust/dtw/jobs/57648139

仅当我将其括在引号中时才会识别该版本(尽管这会导致其他错误,因为7.10不是Travis CI上可用的版本):

language: haskell
ghc:
  - 7.8
  - "7.10"
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?

编辑2015-11-22

关于travis-ci的GHC 7.10有一个未解决的问题:https://github.com/travis-ci/travis-ci/issues/3785

haskell ghc travis-ci

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

哪个线性代数用于Haskell中的OpenGL?

我想在haskell中做一些O​​penGL编程.但我对图书馆的现状感到困惑.OpenGL使用Tensor包,它只定义了几种向量类型(但不是以通用方式这样做).它似乎没有提供任何Matrix实现.

线性代数还有其他几个包:张量(注意小写T),Vec,hmatrix似乎比Tensor更完整.

我正在寻找的应该至少包含3d和2d图形中使用的常用函数,具有合理的性能并且应该与OpenGL兼容,但我想我将不得不为此更改库.

opengl haskell linear-algebra

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

是否有办法懒散地"读"?

我可能只是花了一天的计算时间徒劳:)

问题是我(天真地)将大约3.5GB(压缩)的[(Text, HashMap Text Int)]数据写入文件,此时我的程序崩溃了.当然],数据末尾没有最终版本,而且它的庞大规模使得手动编辑变得不可能.

数据是通过格式化的Prelude.show,就在此时我意识到Prelude.read在返回任何数据之前需要将整个数据集存入内存(不可能).

现在......有没有办法恢复数据而无需手动编写解析器?

更新1

main = do
  s <- getContents
  let hs = read s :: [(String, M.Map String Integer)]
  print $ head hs
Run Code Online (Sandbox Code Playgroud)

我尝试过这个...但它只是在被操作系统杀死之前不断消耗更多内存.

haskell

9
推荐指数
2
解决办法
173
查看次数

可存储和未装箱的矢量之间的差异

所以...我已经使用了未装箱的载体(来自vector包装),现在最好不要考虑太多.vector-th-unbox为他们创建实例变得轻而易举,为什么不呢.

现在我遇到了一个实例,我无法自动派生那些实例,一个带有幻像类型参数的数据类型(如Vector (s :: Nat) a,s编码长度).

这让我想到了StorableUnboxed矢量之间的差异.我自己想出的事情:

  • Unboxed 将元组存储为单独的向量,从而导致更好的高速缓存局部性,而不需要在仅需要其中一个值时浪费带宽.
  • Storable仍将编译为简单(可能有效)的readArray#s,返回未装箱的值(通过阅读核心显而易见).
  • Storable允许直接指针访问,允许与外部代码的互操作性.Unboxed没有.
  • [编辑] Storable实例实际上是更容易用手比写Unbox(即VectorMVector)的.

仅仅这一点并没有让我明白为什么Unboxed即使存在,似乎也没什么好处.可能我错过了那里的东西?

haskell haskell-vector

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

GHC中派生的Eq实例的效率如何?

是否存在内置于GHC(以及一般Haskell)派生实例的短路Eq,当我比较数据类型的同一实例时会触发该实例?

-- will this fire?
let same = complex == complex
Run Code Online (Sandbox Code Playgroud)

我的计划是读取一个惰性数据结构(比如一棵树),更改一些值,然后比较旧版本和新版本以创建一个差异,然后将其写回文件.

如果内置短路,那么一旦发现新结构引用旧值,比较步骤就会中断.同时,这首先不会从文件中读取.

我知道我不应该担心Haskell中的引用,但这似乎是处理惰性文件更改的好方法.如果内置没有短路,是否有办法实现这一点?对不同方案的建议表示欢迎.

haskell lazy-evaluation

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