小编xzh*_*zhu的帖子

GHC-mod是否必须使用类型的全名?

我正在尝试使用ghc-modvim插件进行类型/语法检查等.但是,我发现ghc-mod总是在错误消息中使用完整的类型路径,例如:

test.hs|71 col 13 error| Couldn't match type ‘Data.Text.Internal.Text’                                                                                   
||                with ‘[GHC.Types.Char]’
|| Expected type: containers-0.5.6.2:Data.Map.Base.Map
||                  [GHC.Types.Char]
||                  ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer,
||                     integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)],
||                   containers-0.5.6.2:Data.Set.Base.Set
||                     integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)
||   Actual type: containers-0.5.6.2:Data.Map.Base.Map
||                  Data.Text.Internal.Text
||                  ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer,
||                     integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)],
||                   containers-0.5.6.2:Data.Set.Base.Set
||                     integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)
|| In the second argument of ‘containers-0.5.6.2:Data.Map.Base.map’, namely
||   ‘zippedMap’
|| In the second argument of ‘(GHC.Base.$)’, namely
||   ‘containers-0.5.6.2:Data.Map.Base.map
...
Run Code Online (Sandbox Code Playgroud)

这会使屏幕变得杂乱,我很难找出哪里出了问题.作为比较,这是使用以下内容的同一文件的错误消息ghci:

test.hs:71:13:
    Couldn't match type ‘T.Text’ with ‘[Char]’
    Expected type: M.Map [Char] ([(Integer, …
Run Code Online (Sandbox Code Playgroud)

haskell ghc ghc-mod

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

"upvalue"在Mathematica中意味着什么以及何时使用它们?

对我来说,g /: f[g[x_]] := h[x]只是冗长等同于f[g[x_]] := h[x].你能提出一个你必须使用的例子/:吗?

wolfram-mathematica

23
推荐指数
3
解决办法
2880
查看次数

如何只更新几个时,如何避免引用所有状态变量?

我用来编写几个程序(带内存)的习语如下:

p1 :: State (Int, String) ()
p1 = do
    (a, b) <- get
    ... do something ...
    put (a', b)

p2 :: State (Int, String) ()
p2 = do
    (a, b) <- get
    ... do something else ...
    put (a, b')

main = do
    ... initializing a0 b0 ...
    print . flip evalState (a0, b0)
          . sequence $ replicate 10 p1 ++ repeat p2
Run Code Online (Sandbox Code Playgroud)

但是,随着状态变量数量的增加,这很快就会变得比必要的更冗长:

p1 :: State (Int, String, Bool, Int, String, Bool) ()
p1 = do
    (a, …
Run Code Online (Sandbox Code Playgroud)

haskell state-monad

19
推荐指数
3
解决办法
562
查看次数

当向量非常大但是在内存限制下时,Haskell怎么会出现分段错误?

我想编写一个在一个非常大的数组上运行的程序,并进行大量的随机访问读/写操作.我认为这vector是在Haskell中最合适的方式,所以我写了一个简单的程序来测试它的性能:

import Data.Int
import qualified Data.Vector.Unboxed.Mutable as UM

n = 1000000000

main = do
    a <- UM.new n
    UM.read a 42 :: IO Int32
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它失败了segmentation fault:

$ ghc -O2 test.hs
$ ./test
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

这台机器有足够的内存用于阵列.这是输出free -h:

             total       used       free     shared    buffers     cached
Mem:          251G       150G       100G       672K       419M       141G
-/+ buffers/cache:       9.2G       242G
Swap:         255G       870M       255G
Run Code Online (Sandbox Code Playgroud)

是因为Haskell的vector包无法处理非常大的数组吗?我可以修改我的代码,以便它可以在大型阵列上工作而不会有太多的性能损失吗?


编辑:我的GHC版本是7.10.2.20150906,我的vector版本是0.11.0.0.这是在一台64位的linux机器上

> maxBound :: Int
9223372036854775807
Run Code Online (Sandbox Code Playgroud)

haskell

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

为什么*.prof文件中有这么多反斜杠(\)?

查看*.prof使用+RTS -p启用分析的编译生成的文件,我看到很多这些子例程命名为\:

COST CENTRE           MODULE                         %time %alloc

main.\.\.\            Main                            74.1   85.8
unstreamChunks/inner  Data.Text.Internal.Lazy.Fusion  11.9    8.6 
inverseLetters.\      Main                             4.5    1.7 
main.\.\.\.(...)      Main                             2.9    1.0 
main.\.\.\.(...)      Main                             2.8    1.0 
unstreamChunks/resize Data.Text.Internal.Lazy.Fusion   1.2    0.8 
unstreamChunks/outer  Data.Text.Internal.Lazy.Fusion   1.1    0.5 
Run Code Online (Sandbox Code Playgroud)

这看起来很神秘.这些代表什么?

haskell

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

为什么`(:)`内置?

我注意到这两个定义无法在Haskell文档的最官方资源中找到:

(:) :: a -> [a] -> [a]
data [] a = [] | a : []
Run Code Online (Sandbox Code Playgroud)

我检查过Hoogle并且没有条目data [](:).这两个不应该是"正常"功能和数据类型吗?


编辑:在Haskell 2010语言报告中,他们说

-- The (:) operator is built-in syntax, and cannot legally be given  
-- a fixity declaration; but its fixity is given by:  
--   infixr 5  :  
Run Code Online (Sandbox Code Playgroud)

但为什么?是否有特殊原因可以挑出这个功能?

haskell

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

64kB演示,它们如何工作?

我看过一些程序显示了带有音轨的惊人高度详细的3D场景,但令我震惊的是它们都小于64kB!这些程序如何运作?

在此输入图像描述

3d demoscene

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

如果只有空格,vim中的Autoindent总是清空该行,我能改变吗?

例如,我通常先键入成对的大括号,然后将光标移动到块中,我期望的应该是这样的:

....{
....?
....}
Run Code Online (Sandbox Code Playgroud)

但是vim会自动清空第二行,因为其中只有空格字符,因此结果如下:

....{
?
....}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

(点用于空格字符,█表示光标的位置.)

vim

12
推荐指数
2
解决办法
1917
查看次数

在OpenGL中,我可以绘制一个完全在坐标(5,5)处的像素吗?

通过(5,5)我的意思是第五行和第五列.

我发现使用屏幕坐标绘制东西非常困难,OpenGL中的所有坐标都是相对的,通常在-1.0到1.0之间.为什么阻止程序员使用屏幕坐标/窗口坐标是如此严重?

c opengl glut

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

使用`FileType`事件时是否可以包含多种文件类型?

例如,我想在一个类似文件中映射一个键,该tex文件包含许多不同类型的tex文件.我必须使用这样的多个命令吗?

au FileType tex nm <C-H> <Plug>IMAP_JumpForward
au FileType latex nm <C-H> <Plug>IMAP_JumpForward
au FileType context nm <C-H> <Plug>IMAP_JumpForward
au FileType plaintex nm <C-H> <Plug>IMAP_JumpForward
...
Run Code Online (Sandbox Code Playgroud)

vim latex

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

标签 统计

haskell ×5

vim ×2

3d ×1

c ×1

demoscene ×1

ghc ×1

ghc-mod ×1

glut ×1

latex ×1

opengl ×1

state-monad ×1

wolfram-mathematica ×1