{-# LANGUAGE PatternSynonyms #-}
module Language.Drasil.Code.PackageData (PackageData(packageProg, packageAux),
  pattern PackageData, package
) where

import Drasil.FileHandling (FileLayout)
import Drasil.GOOL (ProgData, onCodeList)

-- | The underlying data type for packages in all renderers.
data PackageData = PackD {PackageData -> ProgData
packageProg :: ProgData, PackageData -> [FileLayout]
packageAux :: [FileLayout]}

pattern PackageData :: ProgData -> [FileLayout] -> PackageData
pattern $mPackageData :: forall {r}.
PackageData -> (ProgData -> [FileLayout] -> r) -> ((# #) -> r) -> r
$bPackageData :: ProgData -> [FileLayout] -> PackageData
PackageData prog aux <- PackD prog aux
  where
    PackageData ProgData
prog [FileLayout]
aux = ProgData -> [FileLayout] -> PackageData
PackD ProgData
prog [FileLayout]
aux
{-# COMPLETE PackageData #-}

package :: (Monad r) => ProgData -> [r FileLayout] -> r PackageData
package :: forall (r :: * -> *).
Monad r =>
ProgData -> [r FileLayout] -> r PackageData
package ProgData
p = ([FileLayout] -> PackageData) -> [r FileLayout] -> r PackageData
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList (ProgData -> [FileLayout] -> PackageData
PackageData ProgData
p)