module HaScalaM.Types.Enums where

import HaScalaM.Classes.Base
import HaScalaM.Classes.Pat
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 c where
    SmGuardE :: Term c => { forall c. SmGuardE c -> c
condGE :: c } -> SmGuardE c

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