当我使用GHCI,我几乎总是结束了进口Control.Applicative,Data.List等等.有没有办法配置GHCi自动导入这些模块.
此外,在导入它们之后,如何防止提示长时间过长?
Prelude Control.Applicative Data.List Database.HDBC Database.HDBC.Sqlite3 System.Directory>
Run Code Online (Sandbox Code Playgroud) 最近,我使用自己喜欢的图像编辑器制作1x1黑色像素(当您想要以便宜的方式在HTML中绘制实心框时,它可以派上用场).虽然我把它变成了单色PNG,但它却是120字节!我的意思是,那有点陡峭.120个字节. 对于一个像素.然后我将它转换为GIF,将大小减小到43个字节.好多了,但还是......
最短的图像文件或程序是或产生一个1x1黑像素.提交可能是:
只要答案属于这两个类别中的一个,任何事情都是公平的.
此外,对于图像文件,请以十六进制或转义指定它们而不是使用外部图像主机:-)
我一直在看CoffeeScript,我不明白你将如何编写这样的代码.它如何在语法中处理嵌套的匿名函数?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 在使用GHC编译的Haskell程序中,是否可以以编程方式防止过多的内存使用?也就是说,让它在内存使用量达到指定限制时通知程序,最好指示有问题的线程.
例如,假设我想编写一个服务器,托管脚本语言解释器,用户可以连接到该服务器.这是Turing-complete,所以程序理论上可以使用无限的内存或时间.假设每个客户端都使用单独的线程处理.如果客户端写入一个非常快速消耗内存的无限循环,我想确保该线程在被异常警告之前消耗的内存不超过1 MB.发生这种情况时,我不希望其他用户受到影响.
这可能是使用单独的进程ulimit,但是:
我宁愿将其保留在一个程序中,以避免进程间通信的复杂性.
我需要支持Linux和Windows,所以如果可能的话,我宁愿保持与平台无关.
Haskell有两个左侧折叠函数用于列表:foldl和"严格"版本foldl'.非严格的问题foldl是它构建了一个thunk的塔:
foldl (+) 0 [1..5]
--> ((((0 + 1) + 2) + 3) + 4) + 5
--> 15
Run Code Online (Sandbox Code Playgroud)
这会浪费内存,如果列表中的项目太多,可能会导致堆栈溢出. foldl'另一方面,强制累加器在每个项目上.
但是,就我所知,foldl'在语义上等同于foldl.评估foldl (+) 0 [1..5]头部正常形式需要在某个时刻强制累加器.如果我们不需要头部正常形式,我们就不会foldl (+) 0 [1..5]开始评估.
有没有令人信服的理由,人们会想要foldl超过那个的行为foldl'?
相关:fclose返回值检查
虽然检查文件的返回值fclose()是否很重要(如果刷新操作失败),是否有必要在读取文件时这样做?
FILE *f = fopen(path, "r");
if (f == NULL)
return 0;
/* Do something with the file... */
if (fclose(f) != 0) {
/* Error closing a file we successfully read. */
return 0;
}
Run Code Online (Sandbox Code Playgroud) 定义Enumerator是:
type Enumerator a m b = Step a m b -> Iteratee a m b
Run Code Online (Sandbox Code Playgroud)
该文档指出,虽然Iteratees comsume数据,Enumerators产生它.我可以理解如何使用这种类型生成数据:
enumStream :: (Monad m) => Stream a -> Enumerator a m b
enumStream stream step =
case step of
Continue k -> k stream
_ -> returnI step -- Note: 'stream' is discarded
Run Code Online (Sandbox Code Playgroud)
(enumEOF比这更复杂......这显然是检查,以确保Iteratee不Continue被发出后EOF,抛如果它的错误.)
即,Iterateea Step运行时生成a runIteratee.这Step是再喂到我的枚举,其与供应它Stream,使其能够继续.我的枚举器返回结果延续.
有一点让我很突出:这个代码在Iterateemonad中运行.这意味着它可以消耗数据,对吗? …
当我输入这个看似无辜的代码片段时:
values.name
Run Code Online (Sandbox Code Playgroud)
gedit将名称突出显示为关键字.但是,关于保留关键字的问题的答案链接到的页面未列出名称.我还在SpiderMonkey中进行了几项微不足道的测试,但名字似乎就像一个普通的标识符.
谷歌搜索也没有告诉我太多.但是,我确实在"其他JavaScript关键字"中找到了一个页面列表名称. 我的猜测是name是一个函数或某些DOM元素的成员,并且不会侵入命名空间.
是名真正在JavaScript中的关键词?如果是这样,它会做什么?
类型签名http是:
http :: MonadIO m
=> Request m
-> (W.Status -> W.ResponseHeaders -> Iteratee S.ByteString m a)
-> Manager
-> Iteratee S.ByteString m a
Run Code Online (Sandbox Code Playgroud)
为什么不这样呢?
http :: MonadIO m => … -> m a
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,a Iteratee x m a就像一个monadic解析器,它消耗类型的项目流x.它http的回调是一个有意义的Iteratee,因为它消耗了响应体.
但是,http它本身似乎不消耗任何输入.所述httpLbs函数执行http与run_(在Data.Enumerator定义).据我所知,run如果给它的iteratee需要输入,则认为这是一个错误:
-- | Run an iteratee until it finishes, and return either the final value
-- (if it succeeded) or the error …Run Code Online (Sandbox Code Playgroud) 什么是生成临时密钥的好方法,其中每个密钥对于程序是唯一的?理想情况下,形式的行为:
newKey :: IO Key
Run Code Online (Sandbox Code Playgroud)
这样:
do a <- newKey
b <- newKey
return (a == b)
Run Code Online (Sandbox Code Playgroud)
总是返回false.此外,应该可以Key在有效的关联容器(例如a Map)中使用.
例如,这可用于维护支持随机插入和删除的事件处理程序集合:
Map Key EventHandler
Run Code Online (Sandbox Code Playgroud)
我知道的选项:
malloc:Fast,并且Ptr ()有一个Ord实例,但结果不是垃圾回收.
newStablePtr():没有垃圾收集,StablePtr也没有Ord实例.
newIORef() >>=makeStableName:应该满足上面的不变量并且是垃圾收集,但更难以使用(需要我使用哈希表).
mallocForeignPtrBytes1:满足两个标准,但它是否有效?
mallocForeignPtrBytes 1似乎是我最好的选择.我想我可以通过newPinnedByteArray#直接使用GHC的primop 来提高效率.
还有更好的选择吗?这种mallocForeignPtrBytes做法是否因某些非显而易见的原因而存在缺陷?
haskell ×6
ghc ×2
iterate ×2
javascript ×2
c ×1
code-golf ×1
coffeescript ×1
file-io ×1
fold ×1
ghci ×1
keyword ×1
memory ×1
strictness ×1