[英]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.