我有一个单元测试文件:
module X04PatMatTest where
import AssertError
import Test.HUnit
import X04PatMat
...
Run Code Online (Sandbox Code Playgroud)
和hlint抱怨:
X04PatMatTest.hs:15:69: Warning: Use string literal
Found:
['a', 'b', 'd']
Why not:
"abd"
Run Code Online (Sandbox Code Playgroud)
由于各种原因,我真的想要['a', 'b', 'd']输入测试代码.
我尝试了各种各样的permuatations
{-# ANN X04PatMatTest "HLint: ignore Warning: Use string literal" #-}
Run Code Online (Sandbox Code Playgroud)
比如将pragma作为文件的第一行,在模块声明之后,用名称module代替X04...,将... 更改Warning为warn...
什么是魔术?
leksah是否支持任何类型的插件?会吗?它是否内置了任何插件,如hlint,hoogle,pl,djinn?如果没有,是否有一种简单的方法来整合这些东西?
我正在看教程http://haskell.org/haskellwiki/How_to_write_a_Haskell_program
import System.Environment
main :: IO ()
main = getArgs >>= print . haqify . head
haqify s = "Haq! " ++ s
Run Code Online (Sandbox Code Playgroud)
在HLint下运行此程序时,它会出现以下错误;
./Haq.hs:11:1: Warning: Eta reduce
Found:
haqify s = "Haq! " ++ s
Why not:
haqify = ("Haq! " ++ )
Run Code Online (Sandbox Code Playgroud)
有人能否对"Eta Reduce"在这种背景下意味着什么有所了解?
当运行在我的程序hlint它报告了一个错误的
\x -> [x]
Run Code Online (Sandbox Code Playgroud)
并提出了替代形式
(: [])
Run Code Online (Sandbox Code Playgroud)
根据hlint关于第一种形式有什么错误,因此为什么我应该使用(不太可读)第二种选择?
(明确地向问题添加了hlint)
在词汇的观点上,我的问题不在于差异是什么(我确实理解它们两者).我的问题是我不明白为什么hlint将其标记为错误.有没有例如懒惰的差异?此外,为什么先前认为hlint的错误只会\x -> Just x引发警告.
我无法使用intero获得在emacs中出现的hlint建议.
~/.emacs文件中我读过解决方案是:
(flycheck-add-next-checker 'intero
'(warning . haskell-hlint))
Run Code Online (Sandbox Code Playgroud)
但我不知道我应该怎么做.如果我将其添加到我的~/.emacs文件中,则emacs会在启动时失败.
(其余的似乎没问题 - 当我打开一个Haskell文件时,intero会启动 - 错误会在我输入时立即被标记.)
如何获得Hlint建议?
HLint是一个Haskell lint工具,用于使代码更加惯用.Erlang有类似的东西吗?
我正在使用MultiWayIf语言扩展.虽然我喜欢HLint(我使用的是版本v1.8.61),但遗憾的是HLint似乎并不知道这个扩展,并且它将多路ifs报告为解析错误:
Warning: Parse error: |
HLint手册(http://community.haskell.org/~ndm/darcs/hlint/hlint.htm)描述了如何使用编译指示来指出要忽略的建议; 但是,由于解析错误,这似乎不适用于警告.
有没有办法告诉HLint忽略解析错误警告?谢谢!
我在一个小项目上运行了HLint,它建议我使用&&&.
示例:
>>> cat st.hs
f = (+) 10
g = (+) 1
main = print $ (\x -> (f x, g x)) 5
>>> hlint st.hs
st.hs:4:17: Warning: Use &&&
Found:
\ x -> (f x, g x)
Why not:
f Control.Arrow.&&& g
1 suggestion
Run Code Online (Sandbox Code Playgroud)
我理解这\x -> (f x, g x)是一种模式,并欣赏这个建议.但是Control.Arrow.&&&没有正常的功能而是箭头,所以我不能&&&按照建议使用.
那么在那种情况下推荐的方式是什么?
&&&在函数上定义我自己的运算符?(arr f) &&& (arr g)但我甚至不知道如何评估它?当我编写Haskell代码时,我在emacs中使用flycheck和haskell-hlint,我认为如果我可以通过调用一些emacs程序而不是手动修改代码来应用这些hlint建议会很棒.
如果没有可用的,以防我必须为自己编写此程序:
是否保证hlint输出始终为以下形式:
Found:
{Text1}
Why not:
{Text2}
Run Code Online (Sandbox Code Playgroud)
哪里{Text?}可以始终解析为Haskell抽象语法树?
当我尝试通过堆栈安装ghc-mod时,我最终会遇到这些依赖性冲突
Error: While constructing the build plan, the following exceptions were encountered:
In the dependencies for ghc-mod-5.8.0.0:
Cabal-2.0.1.1 from stack configuration does not match >=1.18 && <1.25 (latest matching version is 1.24.2.0)
base-4.10.1.0 from stack configuration does not match >=4.6.0.1 && <4.10 (latest matching version is 4.9.1.0)
cabal-helper must match <0.8 && >=0.7.3.0, but the stack configuration has no specified version (latest matching version is 0.7.3.0)
extra-1.6.8 from stack configuration does not match <1.6 && >=1.4 (latest matching version is …Run Code Online (Sandbox Code Playgroud)