module Text.PCLT.HasStaticRawPCLTs where
import qualified Data.Map as M
import Data.Map (Map, (!))
import Data.MyHelpers
import Data.Typeable
import Text.PCLT.Config
import Text.PCLT.Catalog
import Text.PCLT.CatalogMaths
import Text.PCLT.MakeCatalog
import Text.PCLT.Template
data RawPCLTsSetWideness = AlgebraicDataType_RPSW | Module_RPSW | Package_RPSW | System_RPSW deriving (Show, Typeable)
class HasStaticRawPCLTs t where
getStaticRawPCLTs :: PCLT_InnerConfig -> t -> (PCLT_RawCatalogData, [AddPCLT_toPCLT_Error])
widenessOfStaticRawPCLTsSet :: t -> RawPCLTsSetWideness
widenessOfStaticRawPCLTsSet _ = AlgebraicDataType_RPSW
mergeRawCatalogDataSets :: Bool -> [PCLT_RawCatalogData] -> (PCLT_RawCatalogData, [AddPCLT_toPCLT_Error])
mergeRawCatalogDataSets allow_overlaps wrapped_rcd_l =
let rcd_l = map (\ (PCLT_RawCatalogData rcd) -> rcd) wrapped_rcd_l
(rcd_r, errs) = foldr f (M.empty, []) rcd_l
in (PCLT_RawCatalogData rcd_r, errs)
where
f rcd (rcd_accum, errs_list) =
unionWithKey_2
(\ tpl_id ((bylng_m1, sdl1), (bylng_m2, sdl2)) ->
let mb_sdl_err =
case sdl1 == sdl2 of
True -> []
False -> [DifferentSDLs_APTTPTE $ DifferentSDLs_PCLTE tpl_id (sdl1, sdl2)]
in case allow_overlaps of
True -> ((M.union bylng_m1 bylng_m2, sdl1), mb_sdl_err)
False ->
let (bylng_mr, errs) =
unionWithKey_2
(\ lng (str1, _) ->
( str1
, [AddLngTpl_toPCLT_Error_APTTPTE $ TplUniquenessViol_APSTPTE $ TplUniquenessViol_PCLTE tpl_id [lng]]
)
)
(++)
mb_sdl_err
bylng_m1
bylng_m2
in ((bylng_mr, sdl1), errs ++ mb_sdl_err)
)
(++)
errs_list
rcd_accum
rcd
mergeRawCatalogDataSets2 :: Bool -> [(PCLT_RawCatalogData, [AddPCLT_toPCLT_Error])] -> (PCLT_RawCatalogData, [AddPCLT_toPCLT_Error])
mergeRawCatalogDataSets2 allow_overlaps wrapped_rcd_l_w_errs =
let (wrapped_rcd_l, _errs) = unzip wrapped_rcd_l_w_errs
errs0 = concat _errs
(wrapped_rcd_r, errs1) = mergeRawCatalogDataSets allow_overlaps wrapped_rcd_l
in (wrapped_rcd_r, errs0 ++ errs1)