测试函数的类型

Ion*_*nut 2 haskell

我是哈斯凯尔的新手.我读了这个答案,我还想测试我的函数的类型,如果有办法的话.这是一个例子:test.hs

module Test where
import Test.HUnit

test1 = TestCase (assertEqual "test1" 3 (length [1,2,3]))
tests = TestList [test1]

main :: IO Counts
main = runTestTT tests 
Run Code Online (Sandbox Code Playgroud)

我正在运行代码,runghc test.hs我得到:

Cases: 1  Tried: 1  Errors: 0  Failures: 0
Run Code Online (Sandbox Code Playgroud)

现在,我该如何测试length函数的类型?

我已经尝试添加第二个测试test2 = TestCase (assertEqual "test2" "length :: Foldable t => t a -> Int" :type length),但是我收到了这个错误 test.hs:5:77: parse error on input 'type'.

谢谢

Tik*_*vis 10

编写一个测试类型几乎可以肯定不是你想要的.由于Haskell是静态类型的,编译器会在编译时自动为您检查类型,而无需运行任何代码或测试.如果length没有兼容类型,如果您尝试加载代码,则会出现类型错误.

:type是一个特殊的命令ghci,而不是实际的Haskell语法.您不能在正常程序中直接使用它.有一些方法可以获得表示类型的值,但它们有点复杂,而且几乎绝对不是您需要的.

  • 只是为了扮演魔鬼的拥护者:我可以想象想要一个具有例如向前兼容接口和"内部"接口的库这样的东西; 然后你可能想要测试,检查没有不幸的开发人员无意中改变了前向兼容接口的某些部分的类型.(库接口当然可以包含对库使用者有用的操作,但实际上并不是由库本身调用的,因此如果类型发生更改,则不会导致编译失败.) (3认同)