{-# OPTIONS_GHC -fno-warn-orphans #-}

module Mikan.TypeChecking.Serialise.Instances.Errors where

import Mikan.TypeChecking.Serialise.Base
import Mikan.TypeChecking.Serialise.Instances.Common   ( SerialisedRange(..) )
import Mikan.TypeChecking.Serialise.Instances.General  () --instance only
import Mikan.TypeChecking.Serialise.Instances.Internal () --instance only
import Mikan.TypeChecking.Serialise.Instances.Highlighting () --instance only

import Mikan.Syntax.Common.Pretty
import Mikan.TypeChecking.Monad.Diagnostic
import Mikan.TypeChecking.Monad.Base
import Mikan.Interaction.Options
import Mikan.Interaction.Options.ProfileOptions
import Mikan.Interaction.Options.Warnings
import Mikan.Termination.CutOff

import Mikan.Utils.DocTree qualified as DocTree

instance EmbPrj DiagnosticReason where
  icod_ :: DiagnosticReason -> S Word32
icod_ = \case
    DiagnosticReason
DiagError     -> DiagnosticReason -> Arrows (Domains DiagnosticReason) (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' DiagnosticReason
DiagError
    DiagWarning WarningName
n -> (WarningName -> DiagnosticReason)
-> Arrows (Domains (WarningName -> DiagnosticReason)) (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' WarningName -> DiagnosticReason
DiagWarning WarningName
n
  value :: Word32 -> R DiagnosticReason
value = (Node -> R DiagnosticReason) -> Word32 -> R DiagnosticReason
forall a. EmbPrj a => (Node -> R a) -> Word32 -> R a
vcase \case
    Node
N0   -> DiagnosticReason
-> Arrows
     (Constant Word32 (Domains DiagnosticReason))
     (R (CoDomain DiagnosticReason))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN DiagnosticReason
DiagError
    N1 Word32
a -> (WarningName -> DiagnosticReason)
-> Arrows
     (Constant Word32 (Domains (WarningName -> DiagnosticReason)))
     (R (CoDomain (WarningName -> DiagnosticReason)))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN WarningName -> DiagnosticReason
DiagWarning Word32
a
    Node
_    -> R DiagnosticReason
forall a. R a
malformed

instance EmbPrj EncodedDiagnostic where
  icod_ :: EncodedDiagnostic -> S Word32
icod_ (EncodedDiagnostic DiagnosticReason
a String
b) = (DiagnosticReason -> String -> EncodedDiagnostic)
-> Arrows
     (Domains (DiagnosticReason -> String -> EncodedDiagnostic))
     (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' DiagnosticReason -> String -> EncodedDiagnostic
EncodedDiagnostic DiagnosticReason
a String
b

  value :: Word32 -> R EncodedDiagnostic
value = (Node -> R EncodedDiagnostic) -> Word32 -> R EncodedDiagnostic
forall a. EmbPrj a => (Node -> R a) -> Word32 -> R a
vcase \case
    N2 Word32
a Word32
b -> (DiagnosticReason -> String -> EncodedDiagnostic)
-> Arrows
     (Constant
        Word32 (Domains (DiagnosticReason -> String -> EncodedDiagnostic)))
     (R (CoDomain (DiagnosticReason -> String -> EncodedDiagnostic)))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN DiagnosticReason -> String -> EncodedDiagnostic
EncodedDiagnostic Word32
a Word32
b
    Node
_      -> R EncodedDiagnostic
forall a. R a
malformed

instance a ~ EncodedDiagnostic => EmbPrj (TCWarning' a) where
  icod_ :: TCWarning' a -> S Word32
icod_ (TCWarning CallStack
fp Range
r a
a Doc
b String
c Bool
d) = (CallStack
 -> SerialisedRange
 -> EncodedDiagnostic
 -> Doc
 -> String
 -> Bool
 -> TCWarning' EncodedDiagnostic)
-> Arrows
     (Domains
        (CallStack
         -> SerialisedRange
         -> EncodedDiagnostic
         -> Doc
         -> String
         -> Bool
         -> TCWarning' EncodedDiagnostic))
     (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' (\ CallStack
fp -> CallStack
-> Range
-> EncodedDiagnostic
-> Doc
-> String
-> Bool
-> TCWarning' EncodedDiagnostic
forall diag.
CallStack
-> Range -> diag -> Doc -> String -> Bool -> TCWarning' diag
TCWarning CallStack
fp (Range
 -> EncodedDiagnostic
 -> Doc
 -> String
 -> Bool
 -> TCWarning' EncodedDiagnostic)
-> (SerialisedRange -> Range)
-> SerialisedRange
-> EncodedDiagnostic
-> Doc
-> String
-> Bool
-> TCWarning' EncodedDiagnostic
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SerialisedRange -> Range
underlyingRange) CallStack
fp (Range -> SerialisedRange
SerialisedRange Range
r) a
a Doc
b String
c Bool
d
  value :: Word32 -> R (TCWarning' a)
value = (CallStack
 -> SerialisedRange
 -> EncodedDiagnostic
 -> Doc
 -> String
 -> Bool
 -> TCWarning' EncodedDiagnostic)
-> Word32
-> R (CoDomain
        (CallStack
         -> SerialisedRange
         -> EncodedDiagnostic
         -> Doc
         -> String
         -> Bool
         -> TCWarning' EncodedDiagnostic))
forall t.
(VALU t (Arity t), All EmbPrj (CoDomain t : Domains t)) =>
t -> Word32 -> R (CoDomain t)
valueN (\ CallStack
fp -> CallStack
-> Range
-> EncodedDiagnostic
-> Doc
-> String
-> Bool
-> TCWarning' EncodedDiagnostic
forall diag.
CallStack
-> Range -> diag -> Doc -> String -> Bool -> TCWarning' diag
TCWarning CallStack
fp (Range
 -> EncodedDiagnostic
 -> Doc
 -> String
 -> Bool
 -> TCWarning' EncodedDiagnostic)
-> (SerialisedRange -> Range)
-> SerialisedRange
-> EncodedDiagnostic
-> Doc
-> String
-> Bool
-> TCWarning' EncodedDiagnostic
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SerialisedRange -> Range
underlyingRange)

instance EmbPrj ContextEntry where
  icod_ :: ContextEntry -> S Word32
icod_ (CtxVar Name
a Dom Type
b) = Word32
-> (Name -> Dom Type -> ContextEntry)
-> Arrows (Domains (Name -> Dom Type -> ContextEntry)) (S Word32)
forall t.
(ICODE (Word32 -> t) (Arity (Word32 -> t)),
 StrictCurrying (Domains (Word32 -> t)) (S Word32),
 All EmbPrj (Domains (Word32 -> t))) =>
Word32 -> t -> Arrows (Domains t) (S Word32)
icodeN Word32
0 Name -> Dom Type -> ContextEntry
CtxVar Name
a Dom Type
b

  value :: Word32 -> R ContextEntry
value = (Node -> R ContextEntry) -> Word32 -> R ContextEntry
forall a. EmbPrj a => (Node -> R a) -> Word32 -> R a
vcase ((Node -> R ContextEntry) -> Word32 -> R ContextEntry)
-> (Node -> R ContextEntry) -> Word32 -> R ContextEntry
forall a b. (a -> b) -> a -> b
$ \case
    N3 Word32
0 Word32
a Word32
b -> (Name -> Dom Type -> ContextEntry)
-> Arrows
     (Constant Word32 (Domains (Name -> Dom Type -> ContextEntry)))
     (R (CoDomain (Name -> Dom Type -> ContextEntry)))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN Name -> Dom Type -> ContextEntry
CtxVar Word32
a Word32
b
    Node
_        -> R ContextEntry
forall a. R a
malformed

instance EmbPrj Context where
  icod_ :: Context -> S Word32
icod_ (Context [ContextEntry]
a) = Word32
-> ([ContextEntry] -> Context)
-> Arrows (Domains ([ContextEntry] -> Context)) (S Word32)
forall t.
(ICODE (Word32 -> t) (Arity (Word32 -> t)),
 StrictCurrying (Domains (Word32 -> t)) (S Word32),
 All EmbPrj (Domains (Word32 -> t))) =>
Word32 -> t -> Arrows (Domains t) (S Word32)
icodeN Word32
0 [ContextEntry] -> Context
forall a. [a] -> Context' a
Context [ContextEntry]
a

  value :: Word32 -> R Context
value = (Node -> R Context) -> Word32 -> R Context
forall a. EmbPrj a => (Node -> R a) -> Word32 -> R a
vcase ((Node -> R Context) -> Word32 -> R Context)
-> (Node -> R Context) -> Word32 -> R Context
forall a b. (a -> b) -> a -> b
$ \case
    N2 Word32
0 Word32
a -> ([ContextEntry] -> Context)
-> Arrows
     (Constant Word32 (Domains ([ContextEntry] -> Context)))
     (R (CoDomain ([ContextEntry] -> Context)))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN [ContextEntry] -> Context
forall a. [a] -> Context' a
Context Word32
a
    Node
_      -> R Context
forall a. R a
malformed

-- Andreas, 2025-08-01, PR #8040:
-- We serialize Doc as DocTree, fixing the layout,
-- but preserving the annotations.
instance EmbPrj Doc where
  icod_ :: Doc -> S Word32
icod_ Doc
d = (DocTree -> Doc) -> Arrows (Domains (DocTree -> Doc)) (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' (DocTree -> Doc
forall a. HasCallStack => a
undefined :: DocTree -> Doc) (Doc -> DocTree
forall ann. Null ann => Doc ann -> DocTree ann
DocTree.renderToTree Doc
d)
  value :: Word32 -> R Doc
value = (DocTree -> Doc) -> Word32 -> R (CoDomain (DocTree -> Doc))
forall t.
(VALU t (Arity t), All EmbPrj (CoDomain t : Domains t)) =>
t -> Word32 -> R (CoDomain t)
valueN DocTree -> Doc
forall ann. DocTree ann -> Doc ann
DocTree.prettyDocTree

instance EmbPrj PragmaOptions where
  icod_ :: PragmaOptions -> S Word32
icod_    (PragmaOptions WithDefault 'False
a WithDefault 'True
b WithDefault 'False
c WithDefault' UnicodeOrAscii 'True
d Verbosity
e ProfileOptions
f WithDefault 'False
g WithDefault 'False
h WithDefault 'False
i WithDefault 'False
j WithDefault 'True
k WithDefault 'True
l CutOff
m WithDefault 'True
n WithDefault 'True
o WithDefault 'False
p WithDefault 'False
q WithDefault 'True
r WithDefault 'True
s WithDefault 'True
t WithDefault 'False
u WithDefault 'True
v WithDefault 'True
w WithDefault 'True
x WithDefault 'True
y Int
z WithDefault 'False
aa WithDefault 'True
bb Int
cc WithDefault 'False
dd WithDefault 'False
ee WarningMode
ff WithDefault 'True
gg WithDefault 'True
hh WithDefault 'False
ii WithDefault 'False
jj WithDefault 'True
kk WithDefault 'True
ll WithDefault 'False
mm WithDefault 'True
nn WithDefault 'True
oo WithDefault 'True
pp WithDefault 'False
qq WithDefault 'False
rr WithDefault 'False
ss WithDefault 'False
tt WithDefault 'False
uu WithDefault 'False
vv) =
    (WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault' UnicodeOrAscii 'True
 -> Verbosity
 -> ProfileOptions
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> CutOff
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> Int
 -> WithDefault 'False
 -> WithDefault 'True
 -> Int
 -> WithDefault 'False
 -> WithDefault 'False
 -> WarningMode
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> PragmaOptions)
-> Arrows
     (Domains
        (WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault' UnicodeOrAscii 'True
         -> Verbosity
         -> ProfileOptions
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> CutOff
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> Int
         -> WithDefault 'False
         -> WithDefault 'True
         -> Int
         -> WithDefault 'False
         -> WithDefault 'False
         -> WarningMode
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> PragmaOptions))
     (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' WithDefault 'False
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault' UnicodeOrAscii 'True
-> Verbosity
-> ProfileOptions
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> CutOff
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> Int
-> WithDefault 'False
-> WithDefault 'True
-> Int
-> WithDefault 'False
-> WithDefault 'False
-> WarningMode
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> PragmaOptions
PragmaOptions WithDefault 'False
a WithDefault 'True
b WithDefault 'False
c WithDefault' UnicodeOrAscii 'True
d Verbosity
e ProfileOptions
f WithDefault 'False
g WithDefault 'False
h WithDefault 'False
i WithDefault 'False
j WithDefault 'True
k WithDefault 'True
l CutOff
m WithDefault 'True
n WithDefault 'True
o WithDefault 'False
p WithDefault 'False
q WithDefault 'True
r WithDefault 'True
s WithDefault 'True
t WithDefault 'False
u WithDefault 'True
v WithDefault 'True
w WithDefault 'True
x WithDefault 'True
y Int
z WithDefault 'False
aa WithDefault 'True
bb Int
cc WithDefault 'False
dd WithDefault 'False
ee WarningMode
ff WithDefault 'True
gg WithDefault 'True
hh WithDefault 'False
ii WithDefault 'False
jj WithDefault 'True
kk WithDefault 'True
ll WithDefault 'False
mm WithDefault 'True
nn WithDefault 'True
oo WithDefault 'True
pp WithDefault 'False
qq WithDefault 'False
rr WithDefault 'False
ss WithDefault 'False
tt WithDefault 'False
uu WithDefault 'False
vv

  value :: Word32 -> R PragmaOptions
value = (WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault' UnicodeOrAscii 'True
 -> Verbosity
 -> ProfileOptions
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> CutOff
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> Int
 -> WithDefault 'False
 -> WithDefault 'True
 -> Int
 -> WithDefault 'False
 -> WithDefault 'False
 -> WarningMode
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'True
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> WithDefault 'False
 -> PragmaOptions)
-> Word32
-> R (CoDomain
        (WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault' UnicodeOrAscii 'True
         -> Verbosity
         -> ProfileOptions
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> CutOff
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> Int
         -> WithDefault 'False
         -> WithDefault 'True
         -> Int
         -> WithDefault 'False
         -> WithDefault 'False
         -> WarningMode
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'True
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> WithDefault 'False
         -> PragmaOptions))
forall t.
(VALU t (Arity t), All EmbPrj (CoDomain t : Domains t)) =>
t -> Word32 -> R (CoDomain t)
valueN WithDefault 'False
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault' UnicodeOrAscii 'True
-> Verbosity
-> ProfileOptions
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> CutOff
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> Int
-> WithDefault 'False
-> WithDefault 'True
-> Int
-> WithDefault 'False
-> WithDefault 'False
-> WarningMode
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'True
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> WithDefault 'False
-> PragmaOptions
PragmaOptions

instance EmbPrj ProfileOptions where
  icod_ :: ProfileOptions -> S Word32
icod_ ProfileOptions
opts = [ProfileOption] -> S Word32
forall a. EmbPrj a => a -> S Word32
icode (ProfileOptions -> [ProfileOption]
profileOptionsToList ProfileOptions
opts)
  value :: Word32 -> R ProfileOptions
value = ([ProfileOption] -> ProfileOptions)
-> ReaderT Decode IO [ProfileOption] -> R ProfileOptions
forall a b. (a -> b) -> ReaderT Decode IO a -> ReaderT Decode IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [ProfileOption] -> ProfileOptions
profileOptionsFromList (ReaderT Decode IO [ProfileOption] -> R ProfileOptions)
-> (Word32 -> ReaderT Decode IO [ProfileOption])
-> Word32
-> R ProfileOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ReaderT Decode IO [ProfileOption]
forall a. EmbPrj a => Word32 -> R a
value

instance EmbPrj ProfileOption

instance EmbPrj UnicodeOrAscii

instance EmbPrj WarningMode where
  icod_ :: WarningMode -> S Word32
icod_ (WarningMode Set WarningName
a Bool
b) = (Set WarningName -> Bool -> WarningMode)
-> Arrows
     (Domains (Set WarningName -> Bool -> WarningMode)) (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' Set WarningName -> Bool -> WarningMode
WarningMode Set WarningName
a Bool
b

  value :: Word32 -> R WarningMode
value = (Set WarningName -> Bool -> WarningMode)
-> Word32 -> R (CoDomain (Set WarningName -> Bool -> WarningMode))
forall t.
(VALU t (Arity t), All EmbPrj (CoDomain t : Domains t)) =>
t -> Word32 -> R (CoDomain t)
valueN Set WarningName -> Bool -> WarningMode
WarningMode

-- Andreas, 2024-08-18
-- Removed manual implementation of EmbPrj for this Enum type.
instance EmbPrj WarningName

instance EmbPrj CutOff where
  icod_ :: CutOff -> S Word32
icod_ = \case
    CutOff
DontCutOff -> CutOff -> Arrows (Domains CutOff) (S Word32)
forall t.
(ICODE t (Arity t), StrictCurrying (Domains t) (S Word32),
 All EmbPrj (Domains t)) =>
t -> Arrows (Domains t) (S Word32)
icodeN' CutOff
DontCutOff
    CutOff Int
a   -> Word32
-> (Int -> CutOff) -> Arrows (Domains (Int -> CutOff)) (S Word32)
forall t.
(ICODE (Word32 -> t) (Arity (Word32 -> t)),
 StrictCurrying (Domains (Word32 -> t)) (S Word32),
 All EmbPrj (Domains (Word32 -> t))) =>
Word32 -> t -> Arrows (Domains t) (S Word32)
icodeN Word32
0 Int -> CutOff
CutOff Int
a

  value :: Word32 -> R CutOff
value = (Node -> R CutOff) -> Word32 -> R CutOff
forall a. EmbPrj a => (Node -> R a) -> Word32 -> R a
vcase Node -> R CutOff
valu where
    valu :: Node
-> Arrows (Constant Word32 (Domains CutOff)) (R (CoDomain CutOff))
valu Node
N0       = CutOff
-> Arrows (Constant Word32 (Domains CutOff)) (R (CoDomain CutOff))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN CutOff
DontCutOff
    valu (N2 Word32
0 Word32
a) = (Int -> CutOff)
-> Arrows
     (Constant Word32 (Domains (Int -> CutOff)))
     (R (CoDomain (Int -> CutOff)))
forall t.
(VALU t (Arity t),
 StrictCurrying (Constant Word32 (Domains t)) (R (CoDomain t)),
 All EmbPrj (Domains t)) =>
t -> Arrows (Constant Word32 (Domains t)) (R (CoDomain t))
valuN Int -> CutOff
CutOff Word32
a
    valu Node
_        = R CutOff
Arrows (Constant Word32 (Domains CutOff)) (R (CoDomain CutOff))
forall a. R a
malformed