content: module Clash.Verification.DSL where
  
  import qualified Clash.Verification           as Cv
  import           Clash.Verification.Internal
  
  -- Precedences taken from:
  --
  --   Table 2—FL operator precedence and associativity
  --
  -- of
  --
  --   IEEE Std 1850-2010a, Annex B.1, p149
  
  infixr 5 |&|
  (|&|) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a |&| b = Cv.and a b
  {-# INLINE (|&|) #-}
  
  infixr 4 |||
  (|||) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a ||| b = Cv.or a b
  {-# INLINE (|||) #-}
  
  (~>) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a ~> b = Cv.implies a b
  {-# INLINE (~>) #-}
  infixr 0 ~>
  
  (|=>) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a |=> b = Cv.timplies a b
  {-# INLINE (|=>) #-}
  infixr 1 |=>
  
  (|->) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a |-> b = Cv.timpliesOverlapping a b
  {-# INLINE (|->) #-}
  infixr 1 |->
  
  (#|#) :: (AssertionValue dom a, AssertionValue dom b) => a -> b -> Assertion dom
  a #|# b = Cv.before a b
  {-# INLINE (#|#) #-}
  infixr 3 #|#
  