-- SPDX-FileCopyrightText: 2022 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

{-# OPTIONS_HADDOCK not-home #-}

-- | Actual decision implementation for 'FailureType'.
module Morley.Michelson.Typed.ClassifiedInstr.Internal.Classifiers.IsAlwaysFailing
  ( module Morley.Michelson.Typed.ClassifiedInstr.Internal.Classifiers.IsAlwaysFailing
  ) where

import Morley.Michelson.Typed.ClassifiedInstr.Internal.InstrEnum
import Morley.Michelson.Typed.ClassifiedInstr.Internal.Types

-- | Decide whether an instruction is always failing. Only 'NEVER' and
-- 'FAILWITH' are considered always failing.
isAlwaysFailing :: InstrEnum -> FailureType
isAlwaysFailing :: InstrEnum -> FailureType
isAlwaysFailing = \case
  InstrEnum
NEVER -> FailureType
AlwaysFailing
  InstrEnum
FAILWITH -> FailureType
AlwaysFailing
  --------------------
  InstrEnum
WithLoc -> FailureType
FailingNormal
  InstrEnum
Meta -> FailureType
FailingNormal
  InstrEnum
DocGroup -> FailureType
FailingNormal
  InstrEnum
Nop -> FailureType
FailingNormal
  InstrEnum
Ext -> FailureType
FailingNormal
  InstrEnum
Seq -> FailureType
FailingNormal
  InstrEnum
Nested -> FailureType
FailingNormal
  InstrEnum
IF_NONE -> FailureType
FailingNormal
  InstrEnum
IF_LEFT -> FailureType
FailingNormal
  InstrEnum
IF_CONS -> FailureType
FailingNormal
  InstrEnum
AnnMAP -> FailureType
FailingNormal
  InstrEnum
ITER -> FailureType
FailingNormal
  InstrEnum
IF -> FailureType
FailingNormal
  InstrEnum
LOOP -> FailureType
FailingNormal
  InstrEnum
LOOP_LEFT -> FailureType
FailingNormal
  InstrEnum
DIP  -> FailureType
FailingNormal
  InstrEnum
DIPN  -> FailureType
FailingNormal
  InstrEnum
DROP -> FailureType
FailingNormal
  InstrEnum
DROPN -> FailureType
FailingNormal
  InstrEnum
SWAP -> FailureType
FailingNormal
  InstrEnum
DIG -> FailureType
FailingNormal
  InstrEnum
DUG -> FailureType
FailingNormal
  InstrEnum
UNPAIRN -> FailureType
FailingNormal
  InstrEnum
AnnCAR -> FailureType
FailingNormal
  InstrEnum
AnnCDR -> FailureType
FailingNormal
  InstrEnum
AnnDUP -> FailureType
FailingNormal
  InstrEnum
AnnDUPN -> FailureType
FailingNormal
  InstrEnum
AnnPUSH -> FailureType
FailingNormal
  InstrEnum
AnnSOME -> FailureType
FailingNormal
  InstrEnum
AnnNONE -> FailureType
FailingNormal
  InstrEnum
AnnUNIT -> FailureType
FailingNormal
  InstrEnum
AnnPAIR -> FailureType
FailingNormal
  InstrEnum
AnnUNPAIR -> FailureType
FailingNormal
  InstrEnum
AnnPAIRN -> FailureType
FailingNormal
  InstrEnum
AnnLEFT -> FailureType
FailingNormal
  InstrEnum
AnnRIGHT -> FailureType
FailingNormal
  InstrEnum
AnnNIL -> FailureType
FailingNormal
  InstrEnum
AnnCONS -> FailureType
FailingNormal
  InstrEnum
AnnSIZE -> FailureType
FailingNormal
  InstrEnum
AnnEMPTY_SET -> FailureType
FailingNormal
  InstrEnum
AnnEMPTY_MAP -> FailureType
FailingNormal
  InstrEnum
AnnEMPTY_BIG_MAP -> FailureType
FailingNormal
  InstrEnum
AnnMEM -> FailureType
FailingNormal
  InstrEnum
AnnGET -> FailureType
FailingNormal
  InstrEnum
AnnGETN -> FailureType
FailingNormal
  InstrEnum
AnnUPDATE -> FailureType
FailingNormal
  InstrEnum
AnnUPDATEN -> FailureType
FailingNormal
  InstrEnum
AnnGET_AND_UPDATE -> FailureType
FailingNormal
  InstrEnum
AnnLAMBDA -> FailureType
FailingNormal
  InstrEnum
AnnLAMBDA_REC -> FailureType
FailingNormal
  InstrEnum
AnnEXEC -> FailureType
FailingNormal
  InstrEnum
AnnAPPLY -> FailureType
FailingNormal
  InstrEnum
AnnCAST -> FailureType
FailingNormal
  InstrEnum
AnnRENAME -> FailureType
FailingNormal
  InstrEnum
AnnPACK -> FailureType
FailingNormal
  InstrEnum
AnnUNPACK -> FailureType
FailingNormal
  InstrEnum
AnnCONCAT -> FailureType
FailingNormal
  InstrEnum
AnnCONCAT' -> FailureType
FailingNormal
  InstrEnum
AnnSLICE -> FailureType
FailingNormal
  InstrEnum
AnnISNAT -> FailureType
FailingNormal
  InstrEnum
AnnADD -> FailureType
FailingNormal
  InstrEnum
AnnSUB -> FailureType
FailingNormal
  InstrEnum
AnnSUB_MUTEZ -> FailureType
FailingNormal
  InstrEnum
AnnMUL -> FailureType
FailingNormal
  InstrEnum
AnnEDIV -> FailureType
FailingNormal
  InstrEnum
AnnABS -> FailureType
FailingNormal
  InstrEnum
AnnNEG -> FailureType
FailingNormal
  InstrEnum
AnnLSL -> FailureType
FailingNormal
  InstrEnum
AnnLSR -> FailureType
FailingNormal
  InstrEnum
AnnOR -> FailureType
FailingNormal
  InstrEnum
AnnAND -> FailureType
FailingNormal
  InstrEnum
AnnXOR -> FailureType
FailingNormal
  InstrEnum
AnnNOT -> FailureType
FailingNormal
  InstrEnum
AnnCOMPARE -> FailureType
FailingNormal
  InstrEnum
AnnEQ -> FailureType
FailingNormal
  InstrEnum
AnnNEQ -> FailureType
FailingNormal
  InstrEnum
AnnLT -> FailureType
FailingNormal
  InstrEnum
AnnGT -> FailureType
FailingNormal
  InstrEnum
AnnLE -> FailureType
FailingNormal
  InstrEnum
AnnGE -> FailureType
FailingNormal
  InstrEnum
AnnINT -> FailureType
FailingNormal
  InstrEnum
AnnNAT -> FailureType
FailingNormal
  InstrEnum
AnnBYTES -> FailureType
FailingNormal
  InstrEnum
AnnVIEW -> FailureType
FailingNormal
  InstrEnum
AnnSELF -> FailureType
FailingNormal
  InstrEnum
AnnCONTRACT -> FailureType
FailingNormal
  InstrEnum
AnnTRANSFER_TOKENS -> FailureType
FailingNormal
  InstrEnum
AnnSET_DELEGATE -> FailureType
FailingNormal
  InstrEnum
AnnCREATE_CONTRACT -> FailureType
FailingNormal
  InstrEnum
AnnIMPLICIT_ACCOUNT -> FailureType
FailingNormal
  InstrEnum
AnnNOW -> FailureType
FailingNormal
  InstrEnum
AnnAMOUNT -> FailureType
FailingNormal
  InstrEnum
AnnBALANCE -> FailureType
FailingNormal
  InstrEnum
AnnVOTING_POWER -> FailureType
FailingNormal
  InstrEnum
AnnTOTAL_VOTING_POWER -> FailureType
FailingNormal
  InstrEnum
AnnCHECK_SIGNATURE -> FailureType
FailingNormal
  InstrEnum
AnnSHA256 -> FailureType
FailingNormal
  InstrEnum
AnnSHA512 -> FailureType
FailingNormal
  InstrEnum
AnnBLAKE2B -> FailureType
FailingNormal
  InstrEnum
AnnSHA3 -> FailureType
FailingNormal
  InstrEnum
AnnKECCAK -> FailureType
FailingNormal
  InstrEnum
AnnHASH_KEY -> FailureType
FailingNormal
  InstrEnum
AnnPAIRING_CHECK -> FailureType
FailingNormal
  InstrEnum
AnnSOURCE -> FailureType
FailingNormal
  InstrEnum
AnnSENDER -> FailureType
FailingNormal
  InstrEnum
AnnADDRESS -> FailureType
FailingNormal
  InstrEnum
AnnCHAIN_ID -> FailureType
FailingNormal
  InstrEnum
AnnLEVEL -> FailureType
FailingNormal
  InstrEnum
AnnSELF_ADDRESS -> FailureType
FailingNormal
  InstrEnum
AnnTICKET -> FailureType
FailingNormal
  InstrEnum
AnnTICKET_DEPRECATED -> FailureType
FailingNormal
  InstrEnum
AnnREAD_TICKET -> FailureType
FailingNormal
  InstrEnum
AnnSPLIT_TICKET -> FailureType
FailingNormal
  InstrEnum
AnnJOIN_TICKETS -> FailureType
FailingNormal
  InstrEnum
AnnOPEN_CHEST -> FailureType
FailingNormal
  InstrEnum
AnnSAPLING_EMPTY_STATE -> FailureType
FailingNormal
  InstrEnum
AnnSAPLING_VERIFY_UPDATE -> FailureType
FailingNormal
  InstrEnum
AnnMIN_BLOCK_TIME -> FailureType
FailingNormal
  InstrEnum
AnnEMIT -> FailureType
FailingNormal