module ADP.Fusion.Term.Edge.Type where
import Data.Strict.Tuple
import Data.PrimitiveArray
import ADP.Fusion.Base
data Edge e where
Edge :: (Int -> Int -> e) -> Edge e
instance Build (Edge e)
instance
( Element ls i
) => Element (ls :!: Edge e) i where
data Elm (ls :!: Edge e) i = ElmEdge !e !i !i (Elm ls i)
type Arg (ls :!: Edge e) = Arg ls :. e
getArg (ElmEdge e _ _ ls) = getArg ls :. e
getIdx (ElmEdge _ i _ _ ) = i
getOmx (ElmEdge _ _ o _ ) = o
deriving instance (Show i, Show e, Show (Elm ls i)) => Show (Elm (ls :!: Edge e) i)
type instance TermArg (TermSymbol a (Edge e)) = TermArg a :. e