存在哪些库实现严格的数据结构?具体来说,我正在寻找严格的列表和严格的集合.
免责声明:
我知道deepseq.它非常有用,但每次使用deepseq(可能不止一次)时,它会增加遍历整个数据结构的开销.
我知道严格的类似容器的数据结构并不能确保它所包含的所有内容都会被完全评估,但结构本身应该是严格的,例如:
data StrictList a = !a :$ !(StrictList a) | Empty
Run Code Online (Sandbox Code Playgroud)
(这里,包含的元素在WHNF中,可能没有完全评估,但列表的结构是.例如,无限列表将是非终止值.)
我知道关于hackage的'严格'包,但它有一组非常有限的严格数据结构.它既不包含严格的列表也不包含集合.
编写严格的列表我自己似乎非常容易(我喜欢ghc的扩展来派生Functor,Traversable和Foldable,顺便说一下.)但是它似乎仍然可以在一个单独的库中完成.集合的高效实现对我来说似乎并不重要.
ghc能否以某种方式被说服将某些类型的警告视为错误,将其他警告视为警告,同时仍然报告它们?
我希望,这可能是这样的:
ghc -Werror -fwarn-missing-methods -Wwarn -fwarn-missing-signatures
Run Code Online (Sandbox Code Playgroud)
,但我没有运气.(我认为gcc也不支持这个.)
许多人.ghci在其haskell项目中包含文件,以包含加载模块所需的选项ghci.这是一个例子:
:set -isrc -itest -iexamples -packagehspec2
Run Code Online (Sandbox Code Playgroud)
然而试图运行包含文件时,main通过runhaskell一个具有重复所有这些选项,如:
runhaskell -isrc -itest -iexamples -packagehspec2 test/Spec.hs
Run Code Online (Sandbox Code Playgroud)
有没有一种好方法可以runhaskell从.ghci文件中选择选项?
我正在尝试从〜/ .xmonad / Tree.hs导入一个名为'Tree.hs'的自定义本地模块,但是我得到了:
Error detected while loading xmonad configuration file: /home/shahn/.xmonad/xmonad.hs
xmonad.hs:55:8:
Could not find module ‘Tree’
Use -v to see a list of the files searched for.
Please check the file for errors.
Run Code Online (Sandbox Code Playgroud)
ghc似乎没有在〜/ .xmonad中搜索模块。是否有实现此目标的好方法?
目前我的~/.zshrc:
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Run Code Online (Sandbox Code Playgroud)
AFAIU'm:{a-z}={A-Za-z}'意味着我将获得不区分大小写的制表符完成,例如foo将制表符完成到Foobar(如果存在)。并且'r:|[._-]=* r:|=*' 'l:|=* r:|=*'意味着我将获得单词后面部分的匹配项,例如bar将制表符补全到foobar(如果存在)。但这些部分匹配并非不区分大小写。因此,例如bar,不会使用制表符完成FooBar(再次,如果存在的话)。
有办法让它发挥作用吗?