{-# language DeriveFunctor, DeriveFoldable, DeriveTraversable, DeriveGeneric #-} {-| Module : Language.Python.Syntax.Module Copyright : (C) CSIRO 2017-2019 License : BSD3 Maintainer : Isaac Elliott Stability : experimental Portability : non-portable -} module Language.Python.Syntax.Module ( Module (ModuleEmpty, ModuleBlankFinal, ModuleBlank, ModuleStatement) ) where import GHC.Generics (Generic) import Language.Python.Syntax.Expr import Language.Python.Syntax.Statement import Language.Python.Syntax.Whitespace -- | A Python 'Module', which is stored as a sequence of statements. -- A module corresponds to one source file of Python code. data Module v a = ModuleEmpty | ModuleBlankFinal (Blank a) | ModuleBlank (Blank a) Newline (Module v a) | ModuleStatement (Statement v a) (Module v a) deriving (Eq, Show, Functor, Foldable, Traversable, Generic) instance HasStatements Module where _Statements f = go where go ModuleEmpty = pure ModuleEmpty go (ModuleBlankFinal a) = pure $ ModuleBlankFinal a go (ModuleBlank a b c) = ModuleBlank a b <$> go c go (ModuleStatement a b) = ModuleStatement <$> f a <*> go b instance HasExprs Module where _Exprs = _Statements._Exprs