module Language.PureScript.Sugar (desugar, module S) where
import Control.Monad
import Control.Category ((>>>))
import Control.Applicative
import Control.Monad.Error.Class (MonadError(..))
import Control.Monad.Supply.Class
import Language.PureScript.AST
import Language.PureScript.Errors
import Language.PureScript.Sugar.BindingGroups as S
import Language.PureScript.Sugar.CaseDeclarations as S
import Language.PureScript.Sugar.DoNotation as S
import Language.PureScript.Sugar.Names as S
import Language.PureScript.Sugar.ObjectWildcards as S
import Language.PureScript.Sugar.Operators as S
import Language.PureScript.Sugar.TypeClasses as S
import Language.PureScript.Sugar.TypeClasses.Deriving as S
import Language.PureScript.Sugar.TypeDeclarations as S
desugar :: (Applicative m, MonadSupply m, MonadError MultipleErrors m) => [Module] -> m [Module]
desugar = map removeSignedLiterals
>>> mapM desugarObjectConstructors
>=> mapM desugarOperatorSections
>=> mapM desugarDoModule
>=> desugarCasesModule
>=> desugarTypeDeclarationsModule
>=> desugarImports
>=> rebracket
>=> mapM deriveInstances
>=> desugarTypeClasses
>=> createBindingGroupsModule