gpt4 book ai didi

haskell - Haskell 有没有一种方法可以检查一个模块是否导出与另一个模块相同的函数?

转载 作者:行者123 更新时间:2023-12-02 15:52:22 25 4
gpt4 key购买 nike

我有一些规范(用 HSpec 编写),并希望进行一个测试来检查某些函数的重新导出是否按预期进行。

代码:

https://github.com/Wizek/compose-ltr/blob/ab954f00beb56c6c1a595261381d40e7e824e3bc/spec/Spec.hs#L4

如果我进入此文件,如果我手动切换第 4 行或第 5 行是否被注释掉,我可以通过导入运行所有测试。是否有一种简单的方法来制定自动化规范,以确保两个模块导出相同的功能?

我想到的第一件事是导入一个合格的模块,并检查是否相等:

(($>) == (ComposeLTR.$>)) `shouldBe` True
-- Or more succintly
($>) `shouldBe` (ComposeLTR.$>)

但这行不通,因为函数不能直接比较,它们不是 Eq 类型类的一部分。

我能想到的唯一能自动工作的就是导入合格的并为所有 4 个函数定义 QuickCheck 属性,如下所示:

import qualified ComposeLTR

it "should re-export the same function" $ do
let
prop :: (Fun Int Int) -> Int -> Bool
prop (Fun _ f) g = (g $> f) == (g ComposeLTR.$> f)
property prop

-- ... Essentially repeated 3 more times

但这似乎非常专横且多余。有没有一种优雅的方法来检查这一点?

最佳答案

您可以使用StableName IO 中的 s:

Prelude Data.List System.Mem.StableName> v  <- makeStableName   Prelude.takeWhile
Prelude Data.List System.Mem.StableName> v' <- makeStableName Data.List.takeWhile
Prelude Data.List System.Mem.StableName> v == v'
True

关于haskell - Haskell 有没有一种方法可以检查一个模块是否导出与另一个模块相同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32993988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com