在ghci(或ghc)中有没有办法找到本地函数的推断类型是什么?
例如,如果我有一个功能
f l = map f' l
where f' = (+1)
Run Code Online (Sandbox Code Playgroud)
是:t什么方式在ghci中看到推断类型f'是什么?
我试图在Haskell中并行运行多个下载,我通常只使用Control.Concurrent.Async.mapConcurrently函数.但是,这样做会打开~3000个连接,这会导致Web服务器拒绝它们.是否可以完成与mapConcurrent相同的任务,但一次只打开有限数量的连接(即一次只打开2个或4个)?
我有一系列网络请求,每个请求大于10秒.
为了让用户知道发生了什么,我给出了更新:
main = do putStr "Downloading the first thing... "
{- Net request -}
putStrLn "DONE"
putStr "Downloading the second thing... "
{- Net request -}
putStrLn "DONE"
Run Code Online (Sandbox Code Playgroud)
使用GHCi,这可以按预期工作,但编译或使用runghc,"下载"不打印直到"完成".
我用(>> =)和(>>)重写了它,但是我遇到了同样的问题.
这是怎么回事?
haskell中的变量名称需要小写,但是
如果我们想存储g = 9.8和G = 6.67300×10-11(在下面的场景中),如何在.hs文件中声明变量?
传统物理学家提到:
(1)地球上的重力加速度
g = 9.8米/秒^ 2
(2)万有引力常数
G = 6.67300×10-11 m3 kg-1 s-2
Haskeline提供了函数outputStr和outputStrLn输出stdout,但是有没有办法更新已经输出的文本?我想,例如,当安装程序显示当前安装的百分比时 - 百分比数字更新.
我需要使用curses绑定吗?
一般来说,foldl避免赞成foldl'或foldr.引用真实世界Haskell:
由于foldl的thunking行为,在实际程序中避免这种功能是明智的:即使它没有完全失败,也会不必要地低效.相反,导入Data.List并使用foldl'.
然而,一些Prelude函数是根据它来定义的(例如(\\)和unionBy).为什么是这样?是不是对这些功能引入了太多的严格要求?
在实践中,查询列表理解似乎适用于Mnesia和ets/dets表的所有用途.是否有任何操作(或操作类型)比QLC等效操作更有效?
我讨厌使用SO作为查找简单函数的方法,但我真的找不到这样的函数:
给出一个列表(1 2 3 4 5),我想要相当于(PHP的,Perl的,Python的)
$a = array(1, 2, 3, 4, 5);
$a[3] = 100;
Run Code Online (Sandbox Code Playgroud)
结果如何(1 2 3 100 5)
谢谢!
在haskell.org上,我遇到了这个自由风格的功能,被称为"猫头鹰".
((.)$(.))
Run Code Online (Sandbox Code Playgroud)
它的类型签名是
(a -> b -> c) -> a -> (a1 -> b) -> a1 -> c.
这相当于
f a b c d = a b (c d)
并且显然是
((.)$(.)) (==) 1 (1+) 0
回报True.
所以我的问题是:
a1在类型签名是什么意思?它与a?有关吗?(==)某种函数相等运算符?因为0 (==) 0在GHCi中抛出错误.1 (1+) 0在这种情况下意味着什么?我不知道这甚至是一个有效的表达方式.True?我会保持简单:
我想通过HTTPS下载文件; 我尝试过的方法没有用(Network.HTTP.Wget,Network.Curl,Network.Download).
建议?
谢谢!
haskell ×8
asynchronous ×1
built-in ×1
command-line ×1
concurrency ×1
do-notation ×1
erlang ×1
ghci ×1
haskeline ×1
https ×1
io ×1
lisp ×1
list ×1
monads ×1
pointfree ×1
scheme ×1
syntax ×1