source: adblock2privoxy/adblock2privoxy-utils/src/CabalTemplate.hs @ 828fba4

Last change on this file since 828fba4 was 828fba4, checked in by zubr <a@…>, 5 years ago

New PRM spec generation

  • Property mode set to 100644
File size: 1.2 KB
Line 
1module CabalTemplate (
2       CabalValue,
3       (#),
4       (##),
5       text,
6       expandTemplate               
7) 
8where
9import Distribution.PackageDescription
10import Distribution.Text
11import Control.Applicative
12
13data CabalValue = Constant String | Function (PackageDescription -> String)
14
15infixl 1 #, ##
16
17class CabalChainable c where
18     append :: [CabalValue] -> c -> [CabalValue]
19     
20     (#) :: [[CabalValue]] -> c -> [[CabalValue]]
21     (#) (line:lns) item = append line item : lns
22     (#) [] item = [append [] item]
23     
24     (##) :: [[CabalValue]] -> c -> [[CabalValue]]
25     (##) lns item = append [] item : lns
26
27instance CabalChainable String where
28     append line literal = Constant literal : line
29     
30instance CabalChainable (PackageDescription -> String) where
31     append line getter = Function getter : line
32     
33text :: Text t => t -> String
34text = show.disp
35
36expandTemplate :: [[CabalValue]] -> PackageDescription -> String
37expandTemplate template cabalMeta = (unlines.reverse) $ (concat.reverse) <$> stringified
38        where 
39        stringified = (fmap.fmap) stringify template
40       
41        stringify (Constant s) = s
42        stringify (Function f) = f cabalMeta
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Note: See TracBrowser for help on using the repository browser.