module Drasil.System.DrasilWebsite ( DrasilWebsite, mkDrasilWebsite, webRefs, ) where import Control.Lens (makeLenses, (^.)) import qualified Data.Map.Strict as M import Drasil.Database (UID, uid) import Language.Drasil (Reference) import Drasil.System.Core (HasSystemMeta(..), SystemMeta) data DrasilWebsite = DW { DrasilWebsite -> SystemMeta _sm :: SystemMeta, DrasilWebsite -> Map UID Reference _webRefs :: M.Map UID Reference } makeLenses ''DrasilWebsite instance HasSystemMeta DrasilWebsite where systemMeta :: Lens' DrasilWebsite SystemMeta systemMeta = (SystemMeta -> f SystemMeta) -> DrasilWebsite -> f DrasilWebsite Lens' DrasilWebsite SystemMeta sm mkDrasilWebsite :: SystemMeta -> [Reference] -> DrasilWebsite mkDrasilWebsite :: SystemMeta -> [Reference] -> DrasilWebsite mkDrasilWebsite SystemMeta m [Reference] rs = SystemMeta -> Map UID Reference -> DrasilWebsite DW SystemMeta m Map UID Reference refs where refs :: Map UID Reference refs = [(UID, Reference)] -> Map UID Reference forall k a. Ord k => [(k, a)] -> Map k a M.fromList ([(UID, Reference)] -> Map UID Reference) -> [(UID, Reference)] -> Map UID Reference forall a b. (a -> b) -> a -> b $ (Reference -> (UID, Reference)) -> [Reference] -> [(UID, Reference)] forall a b. (a -> b) -> [a] -> [b] map (\Reference r -> (Reference r Reference -> Getting UID Reference UID -> UID forall s a. s -> Getting a s a -> a ^. Getting UID Reference UID forall c. HasUID c => Getter c UID Getter Reference UID uid, Reference r)) [Reference] rs