git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Move type declarations desugaring into its own module
8877913Phil Freeman
purescript.cabal+6−5
@@ -1,5 +1,5 @@
1name: purescript
1name: purescript
2−version: 0.2.1.2
2+version: 0.2.2
3cabal-version: >=1.8
3cabal-version: >=1.8
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -17,10 +17,11 @@ library
17 build-depends: base >=4 && <5, cmdtheline -any, containers -any,
17 build-depends: base >=4 && <5, cmdtheline -any, containers -any,
18 directory -any, filepath -any, mtl -any, parsec -any, syb -any,
18 directory -any, filepath -any, mtl -any, parsec -any, syb -any,
19 transformers -any, utf8-string -any
19 transformers -any, utf8-string -any
20− exposed-modules: Language.PureScript.Scope Data.Generics.Extras
20+ exposed-modules: Language.PureScript.TypeDeclarations
21+ Language.PureScript.BindingGroups Language.PureScript.Scope
21− Language.PureScript Language.PureScript.CodeGen
22+ Data.Generics.Extras Language.PureScript
22− Language.PureScript.CodeGen.Externs Language.PureScript.CodeGen.JS
23+ Language.PureScript.CodeGen Language.PureScript.CodeGen.Externs
23− Language.PureScript.CodeGen.JS.AST
24+ Language.PureScript.CodeGen.JS Language.PureScript.CodeGen.JS.AST
24 Language.PureScript.CodeGen.Monad Language.PureScript.Declarations
25 Language.PureScript.CodeGen.Monad Language.PureScript.Declarations
25 Language.PureScript.Kinds Language.PureScript.Names
26 Language.PureScript.Kinds Language.PureScript.Names
26 Language.PureScript.Operators Language.PureScript.Optimize
27 Language.PureScript.Operators Language.PureScript.Optimize
src/Language/PureScript.hs+3−1
@@ -26,14 +26,16 @@ import Language.PureScript.Pretty as P
26import Language.PureScript.Optimize as P
26import Language.PureScript.Optimize as P
27import Language.PureScript.Operators as P
27import Language.PureScript.Operators as P
28import Language.PureScript.CaseDeclarations as P
28import Language.PureScript.CaseDeclarations as P
29+import Language.PureScript.TypeDeclarations as P
29
30
30import Data.List (intercalate)
31import Data.List (intercalate)
31import Data.Maybe (mapMaybe)
32import Data.Maybe (mapMaybe)
33+import Control.Monad ((>=>))
32
34
33compile :: [Declaration] -> Either String (String, String, Environment)
35compile :: [Declaration] -> Either String (String, String, Environment)
34compile decls = do
36compile decls = do
35 bracketted <- rebracket decls
37 bracketted <- rebracket decls
36− desugared <- desugarCases bracketted
38+ desugared <- desugarCases >=> desugarTypeDeclarations $ bracketted
37 (_, env) <- runCheck (typeCheckAll desugared)
39 (_, env) <- runCheck (typeCheckAll desugared)
38 let js = prettyPrintJS . map optimize . concat . mapMaybe (\decl -> declToJs Nothing global decl env) $ desugared
40 let js = prettyPrintJS . map optimize . concat . mapMaybe (\decl -> declToJs Nothing global decl env) $ desugared
39 let exts = intercalate "\n" . mapMaybe (externToPs 0 global env) $ desugared
41 let exts = intercalate "\n" . mapMaybe (externToPs 0 global env) $ desugared
src/Language/PureScript/BindingGroups.hsnew file+22
@@ -0,0 +1,22 @@
1+-----------------------------------------------------------------------------
2+--
3+-- Module : Language.PureScript.BindingGroups
4+-- Copyright : (c) Phil Freeman 2013
5+-- License : MIT
6+--
7+-- Maintainer : Phil Freeman <paf31@cantab.net>
8+-- Stability : experimental
9+-- Portability :
10+--
11+-- |
12+--
13+-----------------------------------------------------------------------------
14+
15+module Language.PureScript.BindingGroups (
16+ bindingGroups
17+) where
18+
19+import Language.PureScript.Declarations
20+
21+bindingGroups :: [Declaration] -> [[Declaration]]
22+bindingGroups = undefined
src/Language/PureScript/TypeChecker.hs+1−4
@@ -27,7 +27,6 @@ import Language.PureScript.TypeChecker.Synonyms as T
27import Data.Maybe
27import Data.Maybe
28import qualified Data.Map as M
28import qualified Data.Map as M
29
29
30−import Language.PureScript.Values
31import Language.PureScript.Types
30import Language.PureScript.Types
32import Language.PureScript.Names
31import Language.PureScript.Names
33import Language.PureScript.Kinds
32import Language.PureScript.Kinds
@@ -63,9 +62,7 @@ typeCheckAll (TypeSynonymDeclaration name args ty : rest) = do
63 putEnv $ env { types = M.insert (modulePath, name) (kind, TypeSynonym) (types env)
62 putEnv $ env { types = M.insert (modulePath, name) (kind, TypeSynonym) (types env)
64 , typeSynonyms = M.insert (modulePath, name) (args, ty) (typeSynonyms env) }
63 , typeSynonyms = M.insert (modulePath, name) (args, ty) (typeSynonyms env) }
65 typeCheckAll rest
64 typeCheckAll rest
66−typeCheckAll (TypeDeclaration name ty : ValueDeclaration name' [] Nothing val : rest) | name == name' =
65+typeCheckAll (TypeDeclaration _ _ : _) = error "Type declarations should have been removed"
67− typeCheckAll (ValueDeclaration name [] Nothing (TypedValue val ty) : rest)
68−typeCheckAll (TypeDeclaration name _ : _) = throwError $ "Orphan type declaration for " ++ show name
69typeCheckAll (ValueDeclaration name [] Nothing val : rest) = do
66typeCheckAll (ValueDeclaration name [] Nothing val : rest) = do
70 rethrow (("Error in declaration " ++ show name ++ ":\n") ++) $ do
67 rethrow (("Error in declaration " ++ show name ++ ":\n") ++) $ do
71 env <- getEnv
68 env <- getEnv
src/Language/PureScript/TypeDeclarations.hsnew file+32
@@ -0,0 +1,32 @@
1+-----------------------------------------------------------------------------
2+--
3+-- Module : Language.PureScript.TypeDeclarations
4+-- Copyright : (c) Phil Freeman 2013
5+-- License : MIT
6+--
7+-- Maintainer : Phil Freeman <paf31@cantab.net>
8+-- Stability : experimental
9+-- Portability :
10+--
11+-- |
12+--
13+-----------------------------------------------------------------------------
14+
15+module Language.PureScript.TypeDeclarations (
16+ desugarTypeDeclarations
17+) where
18+
19+import Control.Applicative
20+import Control.Monad.Error.Class
21+
22+import Language.PureScript.Declarations
23+import Language.PureScript.Values
24+
25+desugarTypeDeclarations :: [Declaration] -> Either String [Declaration]
26+desugarTypeDeclarations (TypeDeclaration name ty : ValueDeclaration name' [] Nothing val : rest) | name == name' =
27+ desugarTypeDeclarations (ValueDeclaration name [] Nothing (TypedValue val ty) : rest)
28+desugarTypeDeclarations (TypeDeclaration name _ : _) = throwError $ "Orphan type declaration for " ++ show name
29+desugarTypeDeclarations (ModuleDeclaration name ds:ds') = (:) <$> (ModuleDeclaration name <$> desugarTypeDeclarations ds)
30+ <*> desugarTypeDeclarations ds'
31+desugarTypeDeclarations (d:ds) = (:) d <$> desugarTypeDeclarations ds
32+desugarTypeDeclarations [] = return []