git.iko.soy/rowtype-yoga/purescript-native
on ac2b456 help sign in
77 lines 2.5 kB history raw
1-----------------------------------------------------------------------------
2--
3-- Module : Language.PureScript.Sugar
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-- Desugaring passes
13--
14-----------------------------------------------------------------------------
16{-# LANGUAGE FlexibleContexts #-}
18module Language.PureScript.Sugar (desugar, module S) where
20import Prelude ()
21import Prelude.Compat
23import Control.Monad
24import Control.Category ((>>>))
25import Control.Monad.Error.Class (MonadError())
26import Control.Monad.Writer.Class (MonadWriter())
27import Control.Monad.Supply.Class
29import Language.PureScript.AST
30import Language.PureScript.Errors
31import Language.PureScript.Externs
33import Language.PureScript.Sugar.BindingGroups as S
34import Language.PureScript.Sugar.CaseDeclarations as S
35import Language.PureScript.Sugar.DoNotation as S
36import Language.PureScript.Sugar.Names as S
37import Language.PureScript.Sugar.ObjectWildcards as S
38import Language.PureScript.Sugar.Operators as S
39import Language.PureScript.Sugar.TypeClasses as S
40import Language.PureScript.Sugar.TypeClasses.Deriving as S
41import Language.PureScript.Sugar.TypeDeclarations as S
43-- |
44-- The desugaring pipeline proceeds as follows:
45--
46-- * Remove signed literals in favour of `negate` applications
47--
48-- * Desugar object literals with wildcards into lambdas
49--
50-- * Desugar operator sections
51--
52-- * Desugar do-notation using the @Prelude.Monad@ type class
53--
54-- * Desugar top-level case declarations into explicit case expressions
55--
56-- * Desugar type declarations into value declarations with explicit type annotations
57--
58-- * Qualify any unqualified names and types
59--
60-- * Rebracket user-defined binary operators
61--
62-- * Introduce type synonyms for type class dictionaries
63--
64-- * Group mutually recursive value and data declarations into binding groups.
65--
66desugar :: (MonadSupply m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [ExternsFile] -> [Module] -> m [Module]
67desugar externs =
68 map removeSignedLiterals
69 >>> traverse desugarObjectConstructors
70 >=> traverse desugarDoModule
71 >=> desugarCasesModule
72 >=> desugarTypeDeclarationsModule
73 >=> desugarImports externs
74 >=> rebracket externs
75 >=> traverse deriveInstances
76 >=> desugarTypeClasses externs
77 >=> createBindingGroupsModule