1 {-# LANGUAGE OverloadedStrings #-}
3 module Text.Edifact.Scaffolder.Segments.Dependencies
6 , mkDependenciesImports
7 , mkDependenciesReexports
10 import Text.Edifact.Scaffolder.Commons
11 import Text.Edifact.Scaffolder.Segments.Types
13 import Data.List.NonEmpty as NE (nonEmpty, toList)
14 import Data.Maybe (catMaybes, mapMaybe)
15 import Formatting as F
17 mkDependenciesReexports :: NonEmpty Element -> Scaffolding [Export]
18 mkDependenciesReexports = reexportDependencies fElementFunction
20 mkDependenciesImports :: NonEmpty Element -> Scaffolding [ImportGroup]
21 mkDependenciesImports elements =
22 let filterElements optic = mapMaybe optic . NE.toList
23 in maybe [] (pure . ImportGroup) . nonEmpty . catMaybes <$>
25 [ mkCompositeDependenciesImports (filterElements getComposite elements)
26 , mkSimpleDependenciesImports (filterElements getSimple elements)
29 mkSimpleDependenciesImports :: [SimpleCode] -> Scaffolding (Maybe Import)
30 mkSimpleDependenciesImports =
31 ifNonEmpty (importDependencies "Simples" fSimpleParserFunction)
33 mkCompositeDependenciesImports :: [CompositeCode] -> Scaffolding (Maybe Import)
34 mkCompositeDependenciesImports =
35 ifNonEmpty (importDependencies "Composites" fCompositeParserFunction)
37 ifNonEmpty :: Applicative f => (NonEmpty input -> f output) -> [input] -> f (Maybe output)
38 ifNonEmpty f = traverse f . nonEmpty
40 mkDependenciesHaddock :: NonEmpty Element -> Scaffolding [Text]
41 mkDependenciesHaddock = haddockDependencies fElementFunction
43 fElementFunction :: Format r (Element -> r)
45 let buildElementFunction (Simple code _ _ _ _) = bprint fSimpleParserFunction code
46 buildElementFunction (Composite code _ _) = bprint fCompositeParserFunction code
47 in later buildElementFunction