Tag: haskell

哪个Haskell XML库可以使用?

我看到Haskell中有一些XML处理库。 HaXml似乎是最受欢迎的(根据Dons ) HXT似乎是最先进的(也是最难学的箭矢) XML似乎只是基本的parsing器 HXML似乎被放弃了 tagsoup和tagchup libXML和libXML SAX绑定 那么,如果我想要,可以select哪个库 相当强大(从XML中提取数据并修改XML) 很可能在未来很长时间内得到支持 成为“社区select”(默认select) 虽然以上大部分似乎足以满足我目前的需求,但select其中一个的原因是什么呢? UPD 20091222 : 关于许可的一些说明: BSD或MIT: hexpat , hxt , libxml , tagsoup , xml LGPL: HaXml GPLv2许可: GPLv3: libxml-sax , tagchup , tagsoup-ht

Haskell函数可以certificate/模型检查/validation的正确性属性?

继续从下面的想法: 有没有任何可证实的现实世界的语言? 我不了解你,但是我厌倦了写我不能保证的代码。 在问上面的问题并得到一个惊人的回应(谢谢所有!)我已经决定缩小我的search一个可certificate的,实用的方法, 哈斯克尔 。 我select了Haskell是因为它确实有用(有很多为它编写的Web 框架 ,这似乎是一个很好的基准) ,我认为它在function上是足够严格的,它可能是可certificate的,或者至less允许testing不variables。 这是我想要的 (而且一直无法find) 我想要一个框架,可以看看一个Haskell函数,添加,写在psudocode: add(a, b): return a + b – 并检查某些invarients是否保留每个执行状态。 我更喜欢一些正式的证据,但我会解决像模型检查。 在这个例子中,不variables是给定值a和b ,返回值总是和a + b 。 这是一个简单的例子,但我不认为这样的框架是不可能存在的。 一个函数的复杂性肯定会有一个上限,可以被testing(一个函数的10个stringinput肯定需要很长时间!),但是这会鼓励更仔细的函数devise,并且与使用其他forms方法。 想象一下,使用Z或B,当你定义variables/设置时,你要确保你给variables尽可能小的范围。 如果你的INT永远不会超过100,那么确保你初始化它! 像这样的技术和适当的问题分解应该 – 我认为 – 允许对像Haskell这样的纯函数语言进行满意的检查。 我还没有很正式的方法或Haskell经验。 让我知道,如果我的想法是一个健全的,或者你认为哈斯克尔不适合? 如果您build议使用不同的语言,请确保它通过“has-a-web-framework”testing,并阅读原始问题 🙂

什么是Haskell的stream融合

什么是Haskell的Stream Fusion,我该如何使用它?

我的Haskell程序或库如何find它的版本号?

我希望我的cabalised程序有一个–version开关。 我希望它能报告.cabal文件中的相同版本。 如果我必须分别在Haskell源代码和.cabal文件中更新版本号,我最终会使它们不同步。 那么,我的程序怎么能在cabal下编译,从.cabal文件中获取它的版本号呢?

如何用printfs“debugging”Haskell?

来自Ocaml社区,我想学习一点Haskell。 转换进行得相当顺利,但我有点困惑与debugging。 我曾经在我的ocaml代码中join(大量的)“printf”来检查一些中间值,或者作为标记来查看计算完全失败的地方。 由于printf是一个IO动作,我必须解除IO monad中的所有haskell代码才能进行这种debugging吗? 还是有更好的方法来做到这一点(如果可以避免的话,我真的不想用手去做) 我也find跟踪function: http : //www.haskell.org/haskellwiki/Debugging#Printf_and_friends这似乎正是我想要的,但我不明白它的types:没有任何地方的IO ! 有人可以解释我跟踪function的行为吗?

在haskell中的attoparsec或parsec

我必须parsing一些文件,并将其转换为一些预定义的数据types。 Haskell似乎提供了两个包: attoparsec 秒差距 它们之间有什么区别,哪一个更适合根据一些规则parsing文本文件?

Haskell的<|>运算符是做什么的?

浏览Haskell的文档对我来说总是有些痛苦,因为你得到的有关函数的所有信息往往只不过是: fa -> f [a]这可能意味着任何事情。 就像<|>函数的情况一样。 我得到的是: (<|>) :: fa -> fa -> fa ,这是一个“联想二元操作” … 经过对Control.Applicative检查,我了解到它根据实现做了看起来不相关的事情。 instance Alternative Maybe where empty = Nothing Nothing <|> r = r l <|> _ = l 好的,所以如果没有剩下它就返回正确的,否则返回左边,gotcha ..这使我相信这是一个“左或右”的运算符,这是有道理的,因为它使用| 和| 作为“或”的历史用法 instance Alternative [] where empty = [] (<|>) = (++) 除了这里,它只是调用列表的连接操作符…打破我的想法… 那么究竟是什么function呢? 它有什么用途? 它在哪里适合在事物的macros伟计划?

为什么Haskell代码会产生“无限types”错误?

我是Haskell的新手,面临着我无法理解的“无法构造无限types”的错误。 事实上,除此之外,我还没有find一个很好的解释这个错误甚至意味着什么,所以如果你能超越我的基本问题,解释“无限types”的错误,我真的很感激。 代码如下: intersperse :: a -> [[a]] -> [a] — intersperse '*' ["foo","bar","baz","quux"] — should produce the following: — "foo*bar*baz*quux" — intersperse -99 [ [1,2,3],[4,5,6],[7,8,9]] — should produce the following: — [1,2,3,-99,4,5,6,-99,7,8,9] intersperse _ [] = [] intersperse _ [x] = x intersperse s (x:y:xs) = x:s:y:intersperse s xs 试图将其加载到解释器中的错误如下: Prelude> :load ./chapter.3.ending.real.world.haskell.exercises.hs [1 […]

存在types的理论基础是什么?

Haskell维基解释如何使用存在types做了很好的工作,但是我不太理解它背后的理论。 考虑这个存在types的例子: data S = forall a. Show a => S a — (1) 为我们可以转换为String东西定义一个types包装器。 维基提到,我们真正想要定义的是类似的 data S = S (exists a. Show a => a) — (2) 即一个真正的“存在”types – 松散的我认为这是说“数据构造函数S采取任何types的Show实例存在和包装它”。 实际上,你可以写一个GADT,如下所示: data S where — (3) S :: Show a => a -> S 我没有尝试编译,但似乎它应该工作。 对我来说,GADT显然等同于我们想写的代码(2)。 然而,我完全不明白为什么(1)等同于(2)。 为什么把数据构造函数移到外面会把所有的东西变成exists ? 我能想到的最接近的是德摩根的逻辑规律 ,交换否定顺序和量词将存在量词转换为通用量词,反之亦然: ¬(∀x. px) ⇔ […]

Haskellmultithreading有多难?

我听说在Haskell中,创build一个multithreading应用程序就像使用一个标准的Haskell应用程序并使用-threaded标志编译它一样简单。 但是,其他情况下,在实际源代码中描述了使用par命令。 什么是Haskellmultithreading的状态? 引入程序有多简单? 是否有一个很好的multithreading教程,可以查看这些不同的命令及其用法?