{-# LANGUAGE AllowAmbiguousTypes #-}
module HaScalaM.Classes.Enums where
import HaScalaM.Classes.Base
import HaScalaM.Classes.Term
class Tree t => Enumerator t
class ( Pat p
, Term b
, WithBody b t
) => CaseGenerator p b t
where patCG :: t -> p
rhsCG :: t -> b
class ( Pat p
, Term b
, WithBody b t
) => Generator p b t
where patG :: t -> p
rhsG :: t -> b
class ( Tree t
, Term b
) => Guard b t
where condG :: t -> b
class ( Pat p
, Term b
, WithBody b t
) => Val p b t
where patV :: t -> p
rhsV :: t -> b
class ( Enumerator e
, Tree w
) => WithEnums e w
where enums :: w -> [e]