tcStmt ret (AssertStatement l argE) = tcStmtBlock l "assert statement" $ do
    (argE',cstrsargE) <- tcWithCstrs l "assert" $ tcGuard argE
    opts <- askOpts
    when (checkAssertions opts) $ topCheckCstrM_ l cstrsargE $ CheckAssertion $ fmap typed argE'
    tryAddHypothesis l "tcStmt assert" LocalScope checkAssertions cstrsargE $ HypCondition $ fmap typed argE'
    let t = StmtType $ Set.singleton $ StmtFallthru $ ComplexT Void
    return (AssertStatement (notTyped "tcStmt" l) argE',t)
tcStmt ret (AssertStatement l argE) = tcStmtBlock l "assert statement" $ do
    (argE',cstrsargE) <- tcWithCstrs l "assert" $ tcGuard argE
    opts <- askOpts
    when (checkAssertions opts) $ topCheckCstrM_ l cstrsargE $ CheckAssertion $ fmap typed argE'
    tryAddHypothesis l "tcStmt assert" LocalScope checkAssertions cstrsargE $ HypCondition $ fmap typed argE'
    let t = StmtType $ Set.singleton $ StmtFallthru $ ComplexT Void
    return (AssertStatement (notTyped "tcStmt" l) argE',t)
tcStmt ret (AssertStatement l argE) = tcStmtBlock l "assert statement" $ do
    (argE',cstrsargE) <- tcWithCstrs l "assert" $ tcGuard argE
    opts <- askOpts
    when (checkAssertions opts) $ topCheckCstrM_ l cstrsargE $ CheckAssertion $ fmap typed argE'
    tryAddHypothesis l "tcStmt assert" LocalScope checkAssertions cstrsargE $ HypCondition $ fmap typed argE'
    let t = StmtType $ Set.singleton $ StmtFallthru $ ComplexT Void
    return (AssertStatement (notTyped "tcStmt" l) argE',t)