小编zig*_*zou的帖子

Haskell小CPU泄漏

我使用GHC 7.8.3和Yesod 1.4.9遇到了小的CPU泄漏.

当我运行我的网站time并在1分钟后停止它(Ctrl + C)而没有做任何事情(只运行,根本没有请求),它消耗1秒.它占CPU的约1.7%.

$ time mysite
^C

real    1m0.226s
user    0m1.024s
sys     0m0.060s
Run Code Online (Sandbox Code Playgroud)

如果我禁用空闲垃圾收集器,它会下降到0.35秒(占CPU的0.6%).虽然它更好,但它仍然消耗CPU而不做任何事情.

$ time mysite +RTS -I0 # Disable idle GC
^C

real    1m0.519s
user    0m0.352s
sys     0m0.064s

$ time mysite +RTS -I0
^C

real    4m0.676s
user    0m0.888s
sys     0m0.468s

$ time mysite +RTS -I0
^C

real    7m28.282s
user    0m1.452s
sys     0m0.976s
Run Code Online (Sandbox Code Playgroud)

cat无限期等待标准输入上的某些命令相比:

$ time cat
^C

real    1m1.349s
user    0m0.000s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

Haskell中还有其他东西在后台消耗CPU吗?

这是Yesod的漏洞吗?

或者这是我在我的程序中完成的事情?(我只添加了处理函数,我不做并行计算)

编辑2015-05-31 19:25

这是执行-s标志: …

haskell cpu-usage yesod

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

如何处理Haskell中的大量常量?

我正在开发一个库,允许开发人员控制Minitel(法国可视图文终端).

我有很多常量值,我想知道使用Haskell管理它们的最佳方法.这是初学者的常见问题,但我没有找到令人满意的答案.

你可以看看我的项目 (注意:是的,只有一个模块中有太多的常量,这就是我正在做的事情;-))

我目前有模块保持它们name = value.虽然它有效但我想知道它是否可以完善或者我是否做得对.

aNUL = 0x00 -- Null
-- ...
aUS  = 0x1f -- Unit Separator
Run Code Online (Sandbox Code Playgroud)

此方法有一个小缺点:您不能使用模式匹配,如果要保留名称,则需要使用警卫:

completeReturn :: MString -> Bool
completeReturn []                 = False
completeReturn [0x19]             = False -- eSS2
completeReturn [0x1b, 0x5b, 0x32] = False -- eESC, eCSI, 0x32
completeReturn [0x1b, 0x5b, 0x34] = False -- eESC, eCSI, 0x34
completeReturn [0x19, 0x4b]       = False -- eSS2, 0x4b ; cedilla
completeReturn _                  = True
Run Code Online (Sandbox Code Playgroud)

如果您不希望GHC因丢失的签名或类型默认值而对您大喊大叫,您还必须使用GHC选项:

{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-type-defaults #-}
Run Code Online (Sandbox Code Playgroud)

我曾经尝试过data …

haskell constants pattern-synonyms

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

如何创建许多有界类型而不在Haskell中复制代码?

对于一个项目,我创建了一个基于Int的类型,只要程序试图使用超出限制的值(在我的情况下为[0..127])就会抛出错误.下面的代码执行此操作,它适用于我.

是否有可能在Haskell中创建第二个有界类型(例如[0..255])而不重复此代码?

谢谢你的回答

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Minitel.Type.MNatural (MNat, mnat, fromMNat) where

-- | The MNat type. The constructor is hidden.
newtype MNat = MakeMNat Int deriving (Real, Eq, Ord, Show)

-- | MNat is a bounded type
instance Bounded MNat where
    minBound = MakeMNat 0
    maxBound = MakeMNat 127

-- | Converts an Int into an MNat
mnat :: Int -> MNat
mnat x | loLimit <= x && x <= hiLimit = MakeMNat x
       | otherwise = …
Run Code Online (Sandbox Code Playgroud)

haskell bounded-types

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