Haskell中的模块级测试

时间:2017-04-18 10:44:43

标签: haskell

我正在熟悉Haskell,目前正在为我在网上找到的一些课程写第三篇“作业”。需要在名为Golf.hs的文件中以* {1}}开头提供家庭作业*。一切都很好,这似乎是语言中的惯用语。

但是,我习惯于以module Golf where结尾的python模块,其中可以对模块进行测试,包括在模块开发期间。if __name__ == "__main__:对这种方法似乎不满意:

ghc

即使使用$ ghc Golf.hs -o Golf && ./Golf <no location info>: error: output was redirected with -o, but no output will be generated 似乎是常态,我也想了解使程序工作的原始命令行调用。 cabal似乎是测试新编写的代码的另一种方法,但重新加载模块是peta。使用预定义的测试数据编写函数调用的最简单方法是什么,并在ghci结果上观察?

* - 对于实际参加课程的学生,我只是按照讲义并努力完成作业

Golf2.hs:

stdout

输出:

{-# OPTIONS_GHC -Wall #-}

module Golf2 where

foo :: Int -> Int
foo n = 42

main = putStr "Hello"

2 个答案:

答案 0 :(得分:3)

ghci是一个非常有用的学习工具!

当你只有一个模块时,它也很容易。开始:l Golf.hs,然后foo 342。这将加载您的文件。然后,您就可以输入main并查看&#34; 42&#34;显示,或:reload并看到&#34;你好&#34;。您可以编辑该文件,然后使用:rghci加载更改。 Real World Haskell有一个很好的介绍,使用ghc

这比使用cabal或{{1}}等工具更容易,而且在您学习基础知识时真正需要的是。

答案 1 :(得分:3)

如果您想使用import java.util.*; public class SortName implements Comparable<Person>{ public int compareTo(Person p2){ return this.getName().compareTo(p2.getName()); } } - 编译器(而不是其交互式变体ghc),您可以使用-main-is选项。

来自文档:

  

ghci

     

Haskell中的常规规则是您的程序必须在模块-main-is⟨thing⟩中提供主函数。测试时,通常很方便   更改哪个函数是“主”函数,Main标志允许   你这样做。 -main-is可以是以下之一:

     
      
  • 小写标识⟨thing⟩。 GHC假设主要功能是foo
  •   
  • 模块名称Main.foo。 GHC假设主要功能是A
  •   
  • 限定名称A.main。 GHC假设主要功能是A.foo
  •   

所以,试试A.foo