繁体   English   中英

如何在 Haskell 中为实例编写测试用例

[英]How can I write test cases for instances in Haskell

对于我创建的名为 Vec 的类型,我有一个 Num 实例:

instance Num Vec where
  (+) (Vec x) (Vec y) = Vec (zipWith (+) x y)

我正在尝试像往常一样为它编写一个测试用例。 通常,我测试的是函数而不是实例。 我通常是这样做的:

spec :: Spec
spec = do
  describe "(+)" $ do
    it "produces (Vec [2])" $
      Vec [1] + Vec [1] `shouldBe` Vec [2]

由于上面的代码没有产生任何结果,这是否意味着我必须为 (+) 创建函数才能对其进行测试? 我该怎么做?

这不是问题的答案,但评论太长了。

似乎Vec使用了Num的逐点提升。

这对应于在ZipList上使用Applicative提升 ( Ap ):

{-# Language DerivingVia #-}

import Control.Applicative (ZipList(..))
import Data.Monoid         (Ap(..))

-- >> Vec [1] + Vec [1]
-- Vec [2]
newtype Vec = Vec [Int]
  deriving Num
  via Ap ZipList Int

如果要对Vec使用列表语法,也可以使用deriving newtype IsList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM