module ADP.Fusion.Term.Epsilon.Type where import Data.Strict.Tuple import Data.PrimitiveArray import ADP.Fusion.Base data Epsilon = Epsilon instance Build Epsilon instance (Element ls i) => Element (ls :!: Epsilon) i where data Elm (ls :!: Epsilon) i = ElmEpsilon !i !i !(Elm ls i) type Arg (ls :!: Epsilon) = Arg ls :. () getArg (ElmEpsilon _ _ l) = getArg l :. () getIdx (ElmEpsilon i _ _) = i getOmx (ElmEpsilon _ o _) = o {-# Inline getArg #-} {-# Inline getIdx #-} {-# Inline getOmx #-} type instance TermArg (TermSymbol a Epsilon) = TermArg a :. ()