git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Preserve exports list in externs files
3de35a8Gary Burgess
src/Language/PureScript/CodeGen/Externs.hs+12−1
@@ -38,11 +38,22 @@ import Language.PureScript.Types
38moduleToPs :: Module -> Environment -> String
38moduleToPs :: Module -> Environment -> String
39moduleToPs (Module _ _ _ Nothing) _ = error "Module exports were not elaborated in moduleToPs"
39moduleToPs (Module _ _ _ Nothing) _ = error "Module exports were not elaborated in moduleToPs"
40moduleToPs (Module _ moduleName ds (Just exts)) env = intercalate "\n" . execWriter $ do
40moduleToPs (Module _ moduleName ds (Just exts)) env = intercalate "\n" . execWriter $ do
41− tell [ "module " ++ runModuleName moduleName ++ " where"]
41+ tell [ "module " ++ runModuleName moduleName ++ " (" ++ listExports exts ++ ") where"]
42 mapM_ declToPs ds
42 mapM_ declToPs ds
43 mapM_ exportToPs exts
43 mapM_ exportToPs exts
44 where
44 where
45
45
46+ listExports :: [DeclarationRef] -> String
47+ listExports = intercalate ", " . mapMaybe listExport
48+
49+ listExport :: DeclarationRef -> Maybe String
50+ listExport (PositionedDeclarationRef _ _ d) = listExport d
51+ listExport (TypeRef name Nothing) = Just $ show name ++ "()"
52+ listExport (TypeRef name (Just dctors)) = Just $ show name ++ "(" ++ intercalate ", " (map show dctors) ++ ")"
53+ listExport (ValueRef name) = Just $ show name
54+ listExport (TypeClassRef name) = Just $ show name
55+ listExport _ = Nothing
56+
46 declToPs :: Declaration -> Writer [String] ()
57 declToPs :: Declaration -> Writer [String] ()
47 declToPs (ImportDeclaration mn _ _) = tell ["import " ++ show mn ++ " ()"]
58 declToPs (ImportDeclaration mn _ _) = tell ["import " ++ show mn ++ " ()"]
48 declToPs (FixityDeclaration (Fixity assoc prec) op) =
59 declToPs (FixityDeclaration (Fixity assoc prec) op) =