module HaScalaM.Types.Enums where

import HaScalaM.Classes.Base
import HaScalaM.Classes.Term


-- E ---------------------------------------------------------------------------

data SmCaseGeneratorE p b where
    SmCaseGeneratorE :: ( Pat p
                        , Term b
                        ) => { forall p b. SmCaseGeneratorE p b -> p
patCGE :: p
                             , forall p b. SmCaseGeneratorE p b -> b
rhsCGE :: b } -> SmCaseGeneratorE p b

data SmGeneratorE p b where
    SmGeneratorE :: ( Pat p
                    , Term b
                    ) => { forall p b. SmGeneratorE p b -> p
patGE :: p
                         , forall p b. SmGeneratorE p b -> b
rhsGE :: b } -> SmGeneratorE p b

data SmGuardE b where
    SmGuardE :: Term b => { forall b. SmGuardE b -> b
condGE :: b } -> SmGuardE b

data SmValE p b where
    SmValE :: ( Pat p
              , Term b
              ) => { forall p b. SmValE p b -> p
patVE :: p
                   , forall p b. SmValE p b -> b
rhsVE :: b } -> SmValE p b