这个问题基本上是使用GHCi在Haskell程序中调试无限循环的重复.那里的作者手动解决了它,虽然我想知道其他解决方案.
我有一个包含递归调用的箭头代码,
testAVFunctor = proc x -> do
y <- errorArrow "good error" -< x
z <- isError -< y
(passError ||| testAVFunctor) -< trace "value of z" z
Run Code Online (Sandbox Code Playgroud)
本errorArrow应使递归testAVFunctor无法执行,因为这将导致ISERROR返回一个Left (AVError "good error")应依次选择passError路由,绕过递归调用.
非常奇怪的是,在功能组合等热门网站上插入"跟踪"调用会导致程序发出有限量的输出,然后冻结.不是我对无限期扩张问题的期望.(见编辑1)
如果有人这么好奇我在这里上传了我的源代码.
我没有找到正确的地方(如果你想看看源,显然avEither正在循环).我到那里的方法是编译二进制文件,然后运行gdb:
您可以使用ghc标志-O0进行编译以禁用优化,这可以显示更多方法名称.
显然,proc x -> do上面的块导致代码生成组合器,组合器调用AVFunctor.arr …
我有一个(相当)合法的情况,有两个类型实例实现,我想指定一个默认的实例.在注意到使用Int类型的模块化算法导致大量的哈希冲突之后,我想尝试GHC的Int64.我有以下代码:
class Hashable64 a where
hash64 :: a -> Int64
instance Hashable64 a => Hashable a where
hash = fromInteger . toInteger . hash64
instance Hashable64 a => Hashable64 [a] where
hash64 = foldl1 (\x y -> x + 22636946317 * y) . map hash64
Run Code Online (Sandbox Code Playgroud)
和一个实例Hashable64 Char,从而导致两个实现Hashable String,即:
Data.Hashable.Hashable64实例,然后转换为常规Int的实例Data.Hashable.第二个代码路径可能更好,因为它使用Int64s 执行散列.我可以指定使用实例Hashable String的这个派生吗?
对不起,我忘了添加我已经尝试了重叠实例的事情; 也许我只是没有正确实现它?重叠实例的文档说,当一个实例更具体时,它可以工作.但是当我尝试添加特定实例时Hashable String,情况并没有改善.完整代码在[ http://pastebin.com/9fP6LUX2 ](抱歉多余的默认标题).
instance …Run Code Online (Sandbox Code Playgroud) 我发现cabal安装包令人抓狂时的行为.例如,跑步
cabal install funsat
Run Code Online (Sandbox Code Playgroud)
安装旧版本array,time,random,quickcheck,和bitset,破包,比如monadiccp,hoogle,heist,snap,等.
它可以返回cabal install monadiccp等等,但是如何避免cabal破坏已安装软件包的默认行为?在安装新软件包时,任何合理的Linux软件包管理器,aptitude或者zypper会问我是否要破坏已安装的软件包.
有人制作了一个变通脚本吗?提前致谢.
在 PSQL(我相信 Redshift 基于它)中,有像levenshtein/ levenshtein_less_equal[ http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html ]这样的字符串相似度函数。这些功能似乎没有进入 Redshift [ http://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html ]。我错了,还是有人提出了创造性的查询来解决此限制?
有没有办法提取成员函数,并将它们用作F#函数?我希望能够写下列内容:
mystring |> string.Split '\n' |> Array.filter (string.Length >> (=) 0 >> not)
Run Code Online (Sandbox Code Playgroud)
如果您[让]上面的代码有效
let mystring = "a c\nb\n"
let stringSplit (y:char) (x:string) = x.Split(y)
let stringLength (x:string) = x.Length
mystring |> stringSplit '\n' |> Array.filter (stringLength >> (=) 0 >> not)
Run Code Online (Sandbox Code Playgroud) 如果我有以下的话
cat Oliver Louis
Run Code Online (Sandbox Code Playgroud)
并且光标在"c"上,我可以复制到路易斯的开头y/Louis<CR>(其中"CR"是回车键),这将复制字符串"cat Oliver".
有没有办法复制搜索词"路易斯",以及复制的"猫奥利弗路易斯"字符串?提前致谢.
初学者问题 - 您通常将什么用作多图?我想要一个带标签功能的函数,并按每个标签分区元素.例如,
f x | x `mod` 2 == 0 = EVEN
| otherwise = ODD
Run Code Online (Sandbox Code Playgroud)
的输出partition f lst,其中lst :: [Int]将
EVEN --> [list of even numbers]
ODD --> [sublist of odd numbers]
Run Code Online (Sandbox Code Playgroud)
对不起,我在Hoogle上找不到类似的东西.我想我可以通过那里Data.List.Key的group功能,sort和一些映射,但必须有一个更简单的方法,不是吗?这似乎是一个普遍有用的功能.
对不起,这是一个愚蠢的问题; 我如何下载GHC 7.4.1分支?我想玩ConstraintKinds.默认分支似乎说它是7.3版.我确实环顾了一下,但没有看到任何有用的东西,或github存储库中任何名为"7.4"的分支.谢谢!
(PS 如果您是GHC开发人员,将信息添加到http://hackage.haskell.org/trac/ghc/milestone/7.4.1可能会有所帮助吗?)
我有几个vim快捷方式来插入希腊语和数学字符.(对于更好看的评论和Haskell代码.)不幸的是,"forall"字符似乎插入?þX而不是仅仅?.这种行为是否适合您,是否有解决方法?
imap <expr> <A-a> "?"
imap <expr> <A-b> "?"
imap <expr> <A-g> "?"
imap <expr> <A-l> "?"
imap <expr> <S-A-f> "?"
imap <expr> <S-A-e> "?"
Run Code Online (Sandbox Code Playgroud)
您必须使用gvim才能使用"Alt"组合键; 您可以将"A"更改为"C",并尝试在vim需要时使用它.同样的错误出现在我面前.
(似乎我无法映射"alt + key"和"shift + alt + key",但是当它成为问题时我会担心.)
假设我有一个f带整数参数的函数.f可能不会终止某些论点,但其结果同样有价值.(具体来说,参数可以是随机数生成器的种子,它被传递给SAT求解器.)
我想用并发和调用f 1,f 2,f 3等,并在第一个结束返回.因此,每个线程应该运行看起来像的代码
comp <- start_proc (f 1)
wait(comp || anyDone) -- wait for _either_ of these signals to be true
if comp then
set anyDone = True
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?我想到了AMB操作员,但我需要同时运行所有进程(例如在24或80核计算机上).(分布式计算解决方案会更好.)对AMB维基页面的肤浅看法表明它可能不支持非终止进程?
目前,我没有得到满足我想要的答案.我认为这可能更像是我创建流程的方式而不是其他任何问题.
限定
runProc (x:xs) =
createProcess (proc x xs) >>= \(_, _, _, h) -> waitForProcess h
Run Code Online (Sandbox Code Playgroud)
然后,我希望赛runProc ["zsh", "-c", "sleep 3"]和runProc ["ls"].我修改了托马斯的回答,但是没有用.
raceL :: [IO ?] -> IO ?
raceL ops …Run Code Online (Sandbox Code Playgroud)