module Language.PureScript.CoreFn.Module where

import Prelude

import Data.Map.Strict (Map)

import Language.PureScript.AST.SourcePos
import Language.PureScript.Comments
import Language.PureScript.CoreFn.Expr
import Language.PureScript.Names

-- |
-- The CoreFn module representation
--
data Module a = Module
  { forall a. Module a -> SourceSpan
moduleSourceSpan :: SourceSpan
  , forall a. Module a -> [Comment]
moduleComments :: [Comment]
  , forall a. Module a -> ModuleName
moduleName :: ModuleName
  , forall a. Module a -> FilePath
modulePath :: FilePath
  , forall a. Module a -> [(a, ModuleName)]
moduleImports :: [(a, ModuleName)]
  , forall a. Module a -> [Ident]
moduleExports :: [Ident]
  , forall a. Module a -> Map ModuleName [Ident]
moduleReExports :: Map ModuleName [Ident]
  , forall a. Module a -> [Ident]
moduleForeign :: [Ident]
  , forall a. Module a -> [Bind a]
moduleDecls :: [Bind a]
  } deriving (forall a b. a -> Module b -> Module a
forall a b. (a -> b) -> Module a -> Module b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Module b -> Module a
$c<$ :: forall a b. a -> Module b -> Module a
fmap :: forall a b. (a -> b) -> Module a -> Module b
$cfmap :: forall a b. (a -> b) -> Module a -> Module b
Functor, Int -> Module a -> ShowS
forall a. Show a => Int -> Module a -> ShowS
forall a. Show a => [Module a] -> ShowS
forall a. Show a => Module a -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [Module a] -> ShowS
$cshowList :: forall a. Show a => [Module a] -> ShowS
show :: Module a -> FilePath
$cshow :: forall a. Show a => Module a -> FilePath
showsPrec :: Int -> Module a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Module a -> ShowS
Show)