module Sqel.Merge where

import Sqel.Data.Dd (Dd (Dd), DdInc (DdMerge), DdStruct (DdComp, DdPrim))
import Sqel.Type (Merge)

merge :: Dd s -> Dd (Merge s)
merge :: forall (s :: DdK). Dd s -> Dd (Merge s)
merge = \case
  Dd SelW sel
sel Mods mods
mods (DdComp TSelW sel
tsel DdSort c
c DdInc i
_ NP Dd sub
sub) ->
    forall (sel :: Sel) (mods :: [*]) (s1 :: Struct) a.
SelW sel -> Mods mods -> DdStruct s1 -> Dd ('DdK sel mods a s1)
Dd SelW sel
sel Mods mods
mods (forall (sel :: TSel) (c :: Comp) (i :: CompInc) (sub :: [DdK]).
TSelW sel
-> DdSort c -> DdInc i -> NP Dd sub -> DdStruct ('Comp sel c i sub)
DdComp TSelW sel
tsel DdSort c
c DdInc 'Merge
DdMerge NP Dd sub
sub)
  Dd SelW sel
sel Mods mods
mods DdStruct s1
DdPrim ->
    forall (sel :: Sel) (mods :: [*]) (s1 :: Struct) a.
SelW sel -> Mods mods -> DdStruct s1 -> Dd ('DdK sel mods a s1)
Dd SelW sel
sel Mods mods
mods DdStruct 'Prim
DdPrim