Change license :: License to Either SPDX.License License
[cabal.git] / Cabal / Distribution / Types / ExposedModule.hs
blobf6eb47d777ecec82d697a64ed824462689952663
1 {-# LANGUAGE DeriveGeneric #-}
2 module Distribution.Types.ExposedModule where
4 import Distribution.Compat.Prelude
5 import Prelude ()
7 import Distribution.Backpack
8 import Distribution.ModuleName
9 import Distribution.Parsec.Class
10 import Distribution.ParseUtils (parseModuleNameQ)
11 import Distribution.Pretty
12 import Distribution.Text
14 import qualified Distribution.Compat.CharParsing as P
15 import qualified Distribution.Compat.ReadP as Parse
16 import qualified Text.PrettyPrint as Disp
18 data ExposedModule
19 = ExposedModule {
20 exposedName :: ModuleName,
21 exposedReexport :: Maybe OpenModule
23 deriving (Eq, Generic, Read, Show)
25 instance Pretty ExposedModule where
26 pretty (ExposedModule m reexport) =
27 Disp.hsep [ pretty m
28 , case reexport of
29 Just m' -> Disp.hsep [Disp.text "from", disp m']
30 Nothing -> Disp.empty
33 instance Parsec ExposedModule where
34 parsec = do
35 m <- parsecMaybeQuoted parsec
36 P.spaces
38 reexport <- P.optional $ do
39 _ <- P.string "from"
40 P.skipSpaces1
41 parsec
43 return (ExposedModule m reexport)
45 instance Text ExposedModule where
46 parse = do
47 m <- parseModuleNameQ
48 Parse.skipSpaces
49 reexport <- Parse.option Nothing $ do
50 _ <- Parse.string "from"
51 Parse.skipSpaces
52 fmap Just parse
53 return (ExposedModule m reexport)
55 instance Binary ExposedModule
57 instance NFData ExposedModule where rnf = genericRnf