我知道一个Haskell模块名称,但我无法弄清楚它是在什么包中定义的.这很糟糕,因为如果没有暴露这个模块的包,我就无法编译.
具体来说,我无法找到Text.Regex,但我想知道如何解决这个问题.
我有一个关于Hackage的软件包,它已经生成了文件,但它没有出现在Hackage页面上.我能够成功上传所有内容,但文档没有显示出来.
我在Leksah IDE中使用cabal haddock或生成文档Package > Build Documentation.
当我去Package > Open DocLeksah时,它找不到它,因为它正在寻找,dist/doc/html/hspec/hspec/index.html但生成的文件是dist/doc/html/hspec/index.html.我认为Hackage也在寻找同一个地方.
我猜我的源文件不在预期的位置,但我不知道它们应该如何.
源和目录结构可以在https://github.com/trystan/hspec找到.
我有一个Hackage包依赖于第三方包,它不是建立在较新版本的GHC(> = 7.2)上.只需一行补丁(LANGUAGEpragma)即可解决其他软件包的问题.我将补丁发送到上游两次,但没有收到任何反馈.问题是我的包不能安装,直到依赖项得到修复.
我本来可以上传固定版本的depenency软件包(带有一个小版本),但我想听听社区对这种非维护者上传的态度.同样,我不想更改库接口,我只添加一个新的编译标志,使其可以再次构建.
所以我坐在这里想知道为什么我找不到我正在寻找的功能,事实证明它在我安装的软件包版本中不存在.
那么我如何让Hackage告诉我该功能的添加版本是什么?
(特别是,我可以在我的Cabal描述中指定正确的包边界.)
我是Haskell的新手,我正在尝试构建一个受测试的程序.我决定使用HUnit和Cabal.
从我所看到的一个结构良好的项目看起来如下:
src/
AppName/
Appname.hs
testsuite/
tests/
AppName/
TestRunner.hs
AppName.cabal
Setup.hs
Run Code Online (Sandbox Code Playgroud)
对我来说神秘的部分是TestRunner.hs和AppName.cabal.
在testuite/tests目录和子目录下运行所有测试的testrunner会是什么样子?它如何与Cabal集成?
另外,如何将hackage依赖项放在AppName.cabal中并从命令行构建它们?
我很难找到一个完整的示例,从头开始构建一个带有测试和依赖项的应用程序.
谢谢
我想我在hackage文章中Control.Applicative发现了一个缺陷.作为应用仿函数法的描述,它说:
Run Code Online (Sandbox Code Playgroud)class Functor f => Applicative f where带有应用程序的仿函数,提供嵌入纯表达式(
pure)和序列计算的操作,并组合它们的结果(<*>).最小完整定义必须包括满足以下法则的这些函数的实现:
身分
Run Code Online (Sandbox Code Playgroud)pure id <*> v = v组成
Run Code Online (Sandbox Code Playgroud)pure (.) <*> u <*> v <*> w = u <*> (v <*> w)同态
Run Code Online (Sandbox Code Playgroud)pure f <*> pure x = pure (f x)互换
Run Code Online (Sandbox Code Playgroud)u <*> pure y = pure ($ y) <*> u
(请注意,这并未说明有关fmap的任何内容)并且它声明这些法律确定了Functor实例:
作为这些法律的结果,
Functorf 的实例将满足Run Code Online (Sandbox Code Playgroud)fmap f x = pure f <*> x
我一开始以为这显然是错的.也就是说,我猜测必须存在t满足以下两个条件的类型构造函数:
t是一个 …我正在寻找一个无monad,常量访问查询O(1)关联数组.
考虑假设类型:
data HT k v = ???
Run Code Online (Sandbox Code Playgroud)
我想构建一次不可变结构:
fromList :: Foldable t, Hashable k => t (k,v) -> HT k v
Run Code Online (Sandbox Code Playgroud)
我希望随后以恒定时间访问重复查询::
lookup :: Hashable k => HT k v -> k -> Maybe v
Run Code Online (Sandbox Code Playgroud)
似乎有两个候选图书馆不足:
unordered-containersunordered-containers包含类型的严格和惰性变体HashMap.两者HashMap都有函数记录的O(log n)查询lookup.此查询访问时间似乎是由于HashMap类型的构造,其具有允许O(log n) insert功能的内部树结构.对于许多用例而言,可理解的设计权衡,但由于我不需要可变,HashMap这种权衡妨碍了我的用例.
hashtableshashtables包含一个HashTable类型类和三个具有不同表构造策略的实例类型.这个库的类型类定义了一个常量时间O(1) lookup函数定义,但它永远嵌入在STmonad中.没有办法"冻结"有状态HashTable实现lookup,并且没有嵌入有状态monad 的函数.当整个计算以状态monad包装时,库的类型类接口设计得很好,但这种设计不适合我的用例.
是否存在一些定义类型和函数的其他库,它们可以构造一个不可嵌入的常量访问查询O(1)关联数组,该数组未嵌入有状态monad中?
是否存在某种方法来包装或修改这些现有的基于散列的库,以生成不嵌入有状态monad …
当我将模块上传到Hackage时,我收到以下错误消息:
"暴露的模块使用未分配的顶级名称"
我将模块声明为.cabal文件中的公开模块.还有什么我应该做的吗?
干净安装"Haskell平台".(OS X Snow-Leopard&Platform 2010.1.0.1),这样做会导致简单的序列导致非常奇怪的cabal install行为:
$ cabal install time
$ cabal install random
$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
random-1.0.0.2
Run Code Online (Sandbox Code Playgroud)
random-1.0.0.2在我的系统中安装了两次.现在每次都要cabal install random重新安装random-1.0.0.2.
看起来random取决于time,并且cabal想要在有新版本time可用之后重新安装它?而且由于两个random-1.0.0.2阴谋混淆并总是认为它不是最新的,因为它正在看第一个?
ghc-pkg check 发现没有错误.
我有两个版本在他们的一些依赖项之前意外上传:
从那时起,他们的依赖关系早已得到满足,但是直到今天还没有生成他们的文档.
如何触发Hackage对这些版本的重新评估?上传新版本是解决这种愚蠢问题的唯一方法吗?
我在"维护者的角落"里找不到任何相关内容.