是否有可能在lambda函数上有警卫? 例如: \k | k < 0 -> "negative" | k == 0 -> "zero" | otherwise -> "positive"
我正在接收和处理JSON请求的Haskell守护进程。 虽然守护进程的操作是复杂的,但主要的结构是故意保持简单:其内部状态只是一个具有数据结构的IORef ,所有线程都在这个IORef上执行primefaces操作。 然后有一些线程在触发器上取值a做一些事情。 问题是守护进程正在泄漏内存,我找不到原因。 这当然与请求有关:当守护进程每秒获得几个请求时,它会泄漏1MB / s的东西(如Linux工具所报告的)。 内存消耗稳步增加。 没有请求,内存消耗保持不变。 令我感到困惑的是,这些都没有显示在GHC分析中。 要么我在configuration文件参数中丢失了某些内容,或者内存被别的东西占用了: 用+RTS -hc -xt -p运行+RTS -hc -xt -p : 运行+RTS -hr -xt -p : 在此testing运行期间,守护进程随后消耗超过1GB。 所以分析数据显然不符合实际消耗的内存数量级。 (据我所知,RTS,GC和configuration本身增加了实际的内存消耗,但是这种差别太大了,并不符合不断增长的消耗。) 我已经尝试过处理rnf中守护进程的所有状态数据,以及parsing的JSON请求(以避免部分JSONstring被保留在某处),但是没有太多成功。 任何意见或build议表示欢迎。 更新:守护进程在没有-threaded情况下运行,所以没有OS级的线程。 GC统计信息比堆分析更接近Linux报告的数字: Alloc Copied Live GC GC TOT TOT Page Flts bytes bytes bytes user elap user elap […] 5476616 44504 2505736 0.00 0.00 23.21 […]
我一直在试用cabal头,它支持类似于cabal-dev的沙箱。 然而,目前还不支持cabal-dev ghci等价物, 显然没有为下一个版本计划提供支持 。 有什么咒语我可以用来解决这个问题,并得到类似于cabal-dev ghci东西吗?
当我打开一个阅读Haskell的文件时,我发现在closures文件后我不能使用这个文件的内容。 例如,这个程序将打印一个文件的内容: main = do inFile <- openFile "foo" ReadMode contents <- hGetContents inFile putStr contents hClose inFile 我预计交换putStr线与hClose线将没有任何效果,但是这个程序什么也不打印: main = do inFile <- openFile "foo" ReadMode contents <- hGetContents inFile hClose inFile putStr contents 为什么会这样呢? 我猜这与懒惰评估有关,但我认为这些expression式会被sorting,所以不会有问题。 你将如何实现像readFile这样的函数?
所以我和我的朋友争辩说,像GCC这样的编译器可以自动检测一个纯函数而没有任何types的信息。 我不信。 像D或Haskell这样的语言在他们的types系统中具有纯度,程序员明确地定义了什么函数是纯粹的。 一个纯函数没有副作用,因此很容易被并行化。 所以问题是:这是否是必要的? 一个编译器是否可以检测到纯度,没有任何元或types的信息,只要假设IO或自动访问全局variables的任何东西都不是纯粹的?
有人能简单地解释两者之间的区别吗? 我并不完全理解monad是endofunctors而不是functor的部分。
我正在阅读学习你一个Haskell ,我想知道为什么这么多东西都像列表一样,Prelude中没有任何东西使用types的本地工具来设置它: “字节串的版本:被称为cons它需要一个字节和一个字节串,并且把字节放在开始位置,这很懒,所以即使字节串中的第一个块没有满,它也会产生一个新的块,这就是为什么如果你要在字节串的开头插入大量的字节,最好使用严格版本的缺点。 为什么没有TypeClass 列表或者提供了:函数来统一Data.ByteString , Data.List , Data.ByteString.Lazy等? 这是否有一个原因,或者这只是遗留的Haskell元素? 使用:作为一个例子有点轻描淡写,也来自LYAH: 否则,字节串模块具有类似于Data.List中的函数的负载,包括但不限于头部,尾部,init,空值,长度,映射,反转,foldl,foldr,concat,takeWhile,filter等等
我想升级所有的软件包,而不仅仅是一个具有cabal install –upgrade-dependencies 。
对于单子M ,是否可以将A => M[B]变成M[A => B] ? 我已经尝试过这种types无济于事了,这让我觉得这是不可能的,但我想我会问。 而且,在Hooglesearcha -> mb -> m (a -> b)没有返回任何东西,所以我不会很幸运。
我正在尝试使用HSlogger获取有关我的程序的一些信息。 所以我添加下面的行到我的function import Data.Word import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import Data.Bits import Data.Int import Data.ByteString.Parser import System.Log.Logger import System.Log.Handler.Syslog importFile :: FilePath -> IO (Either String (PESFile )) importFile n = do warningM "MyApp.Component2" "Something Bad is about to happen." … 这工作正常,因为function是在IO内。 但是,当我添加一个类似的行到以下function: … parsePES :: Parser PESFile parsePES = […]