如何在 HSpec 中指定测试套件?我将为我*.hs的每个模块创建多个测试文件,我只想运行stack test并运行所有测试。我该如何设置?
我试图在我的 cabal 文件中列出这样的测试模块,但它不起作用:
test-suite foo-test
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Spec.hs
, Mod1Spec.hs
build-depends: base
, containers >= 0.5.6.2
, hqfl
, hspec >= 2.2.3
, hspec >= 2.2.3
, mtl >= 2.2.1
, pipes >= 4.1.8
, random >= 1.1
ghc-options: -threaded -rtsopts -with-rtsopts=-N
default-language: Haskell2010
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的项目结构
请注意,“api/test”目录包含“Spec.hs”,“api”是我的项目根目录,其中包含“.cabal”和“.yaml”文件。
当我$ stack ghci从项目根(api)运行时,api/test/Spec.hs不在范围内。而我的模块在api/src/范围内。
为什么定义的模块api/test不在范围内?
我的 .cabal 文件配置正确,以便$ stack test能够成功运行api/test/Spec.hs.
我什至无法Spec.hs从 ghci 加载模块。尝试通过从 ghci 内部运行来执行此操作
> :l test/Spec.hs会出现许多“无法加载接口”错误。
我正在尝试在 Windows 服务器上运行小鸭(https://github.com/facebook/duckling)。
不幸的是,服务器只能访问内网,不能访问互联网。我如何设置 Haskell 以便能够在没有互联网访问的情况下构建和运行包?
每当我尝试使用 、 和其他几个软件包安装某些东西时stack,$ stack install hip它们$ stack install Gifcurry都会抛出相同的错误:
Downloaded lts-12.9 build plan.
AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""
Run Code Online (Sandbox Code Playgroud)
这是我第一次尝试使用stack安装任何东西,所以我不知道该怎么做。在做这件事之前我确实跑步了$ stack upgrade。
堆栈版本是1.5.1 x86_64,它位于目录中usr/bin/stack。
我通常会stack install <package-name>和Stack一起安装它~/.local/bin.
我有办法指定目的地位置吗?
给定一个由空格分隔的单词输入文件,文件大小约为 64mb:
main :: IO ()
main = do
content <- getData "data_1.txt" -- opens file, reads contents, closes handle,returns
let tokens = words content
mappedData = map (\token -> (token, 1)) tokens
keySet = Set.fromList tokens
intermediateData = map (\key -> (key, map snd (filter (\kv -> fst kv == key) mappedData))) (Set.toList keySet)
final = map (\pair -> (fst pair, foldr (+) 0 (snd pair))) intermediateData
print final
Run Code Online (Sandbox Code Playgroud)
与
content = ""
with open("data_1.txt", "r") as file:
content …Run Code Online (Sandbox Code Playgroud) memory performance haskell functional-programming haskell-stack
我正在尝试在Haskell中执行以下操作:
someFunction :: [] -> Int
someFunction list
let a
| length list == 1 = 10
| otherwise = 0
b
| length list == 1 = 10
| otherwise = 0
in findValues (a+b)
Run Code Online (Sandbox Code Playgroud)
因此,a和b的值将取决于守卫的条件是否得到满足.这种语法一直给我错误,我不知道为什么.我是否需要使用where子句或是否有正确的"let"语法来实现我想要的?
谢谢你的帮助
haskell functional-programming haskell-platform guard-statement haskell-stack
我对Haskell和堆栈都很新.
import Data.Set
import Data.Stack
Run Code Online (Sandbox Code Playgroud)
上述语句触发编译错误:Could not find module 'Data.Set'. Perhaps you meant 'Data.Int'.我试图谷歌,发现没有类似的东西.
因此,我的问题是:我是否需要手动指定外部依赖项或仅仅是我的stack build命令,为什么无法从某个缓存或存储库中获取适当的模块?
如果我必须手动指定我的依赖项,我应该更喜欢.cabal或.yaml?处理版本控制的正确方法是什么?
为什么不能在Haskell中导入Data.Stream?
Prelude> import Data.Stream
<no location info>: error:
Could not find module ‘Data.Stream’
Perhaps you meant Data.String (from base-4.12.0.0)
Run Code Online (Sandbox Code Playgroud) main = do line <- getLine
let line' = reverse line
putStrLn $ "You said " ++ line' ++ " backwards!"
putStrLn $ "Yes, you really said " ++ line ++ " backwards!"
Run Code Online (Sandbox Code Playgroud)
错误:
$ stack runhaskell "c:\Users\FruitfulApproach\Desktop\Haskell\test.hs"
C:\Users\FruitfulApproach\Desktop\Haskell\test.hs:4:5: error:
parse error on input `putStrLn'
|
4 | putStrLn $ "You said " ++ line' ++ " backwards!"
| ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我也尝试过在缩进线上使用单个选项卡。
这是我的标签->空格设置:
我也尝试过重新启动VSCode。
提前致谢!