@@ -35,11 +35,17 @@ import Language.PureScript.Environment
36moduleToPs :: Module -> Environment -> String
36moduleToPs :: Module -> Environment -> String
37moduleToPs (Module _ _ Nothing) _ = error "Module exports were not elaborated in moduleToPs"
37moduleToPs (Module _ _ Nothing) _ = error "Module exports were not elaborated in moduleToPs"
38−moduleToPs (Module moduleName _ (Just exts)) env = intercalate "\n" . execWriter $ do
38+moduleToPs (Module moduleName ds (Just exts)) env = intercalate "\n" . execWriter $ do
39 tell ["module " ++ runModuleName moduleName ++ " where"]
39 tell ["module " ++ runModuleName moduleName ++ " where"]
40 mapM_ exportToPs exts
41 mapM_ exportToPs exts
44+ fixityToPs :: Declaration -> Writer [String] ()
45+ fixityToPs (FixityDeclaration (Fixity assoc prec) ident) =
46+ tell [ unwords [ show assoc, show prec, ident ] ]
47+ fixityToPs _ = return ()
43 exportToPs :: DeclarationRef -> Writer [String] ()
49 exportToPs :: DeclarationRef -> Writer [String] ()
44 exportToPs (TypeRef pn dctors) = do
50 exportToPs (TypeRef pn dctors) = do
45 case Qualified (Just moduleName) pn `M.lookup` types env of
51 case Qualified (Just moduleName) pn `M.lookup` types env of
@@ -62,15 +68,15 @@ moduleToPs (Module moduleName _ (Just exts)) env = intercalate "\n" . execWriter
62 exportToPs (ValueRef ident) =
68 exportToPs (ValueRef ident) =
63 case (moduleName, ident) `M.lookup` names env of
69 case (moduleName, ident) `M.lookup` names env of
64 Nothing -> error $ show ident ++ " has no type in exportToPs"
70 Nothing -> error $ show ident ++ " has no type in exportToPs"
65− Just (ty, nameKind) | nameKind == Value || nameKind == Extern ForeignImport ->
71+ Just (ty, nameKind) | nameKind == Value || nameKind == Extern ForeignImport || nameKind == Extern InlineJavascript ->
66 tell ["foreign import " ++ show ident ++ " :: " ++ prettyPrintType ty]
72 tell ["foreign import " ++ show ident ++ " :: " ++ prettyPrintType ty]
67 _ -> return ()
73 _ -> return ()
68 exportToPs (TypeClassRef className) =
74 exportToPs (TypeClassRef className) =
69 case Qualified (Just moduleName) className `M.lookup` typeClasses env of
75 case Qualified (Just moduleName) className `M.lookup` typeClasses env of
70 Nothing -> error $ show className ++ " has no type class definition in exportToPs"
76 Nothing -> error $ show className ++ " has no type class definition in exportToPs"
71− Just (args, ds) -> do
77+ Just (args, members) -> do
72 tell ["class " ++ show className ++ " " ++ unwords args ++ " where"]
78 tell ["class " ++ show className ++ " " ++ unwords args ++ " where"]
73− forM_ (filter (isValueExported . fst) ds) $ \(member ,ty) ->
79+ forM_ (filter (isValueExported . fst) members) $ \(member ,ty) ->
74 tell [ " " ++ show member ++ " :: " ++ prettyPrintType ty ]
80 tell [ " " ++ show member ++ " :: " ++ prettyPrintType ty ]
75 exportToPs (TypeInstanceRef ident) = do
81 exportToPs (TypeInstanceRef ident) = do
76 let TypeClassDictionaryInScope { tcdClassName = className, tcdInstanceTypes = tys, tcdDependencies = deps} =
82 let TypeClassDictionaryInScope { tcdClassName = className, tcdInstanceTypes = tys, tcdDependencies = deps} =