module ADP.Fusion.Core.Term.Epsilon where
import Data.Data
import Data.Strict.Tuple
import Data.Typeable
import GHC.Generics(Generic)
import Data.PrimitiveArray
import ADP.Fusion.Core.Classes
import ADP.Fusion.Core.Multi
data LocalGlobal = Local | Global
deriving (Eq,Ord,Read,Show,Data,Typeable,Generic)
data Epsilon (lg ∷ LocalGlobal) = Epsilon
instance Build (Epsilon lg)
instance (Element ls i) => Element (ls :!: Epsilon lg) i where
data Elm (ls :!: Epsilon lg) i = ElmEpsilon !(RunningIndex i) !(Elm ls i)
type Arg (ls :!: Epsilon lg) = Arg ls :. ()
getArg (ElmEpsilon _ l) = getArg l :. ()
getIdx (ElmEpsilon i _) = i
{-# Inline getArg #-}
{-# Inline getIdx #-}
type instance TermArg (Epsilon lg) = ()