packages feed

heck-0.2025.5.22: source/library/Heck.hs

{-# LANGUAGE RankNTypes #-}

module Heck where

import qualified Control.Monad as Monad
import qualified GHC.Stack as Stack

data Test m n = MkTest
  { assertFailure :: forall x. (Stack.HasCallStack) => String -> m x,
    describe :: String -> n () -> n (),
    it :: String -> m () -> n ()
  }

assertEq ::
  (Stack.HasCallStack, Applicative m, Eq a, Show a) =>
  Test m n ->
  -- | expected
  a ->
  -- | actual
  a ->
  m ()
assertEq test expected actual =
  Monad.when (expected /= actual)
    . assertFailure test
    $ "expected " <> show expected <> " but got " <> show actual