2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
4 \section[Desugar]{@deSugar@: the main function}
7 #include "HsVersions.h"
9 module Desugar ( deSugar, pprDsWarnings
10 #if __GLASGOW_HASKELL__ < 200
17 import CmdLineOpts ( opt_D_dump_ds )
18 import HsSyn ( HsBinds, HsExpr, MonoBinds,
19 SYN_IE(RecFlag), nonRecursive, recursive
21 import TcHsSyn ( SYN_IE(TypecheckedMonoBinds), SYN_IE(TypecheckedHsExpr)
24 import PprCore ( pprCoreBindings )
25 import Name ( isExported )
27 import DsBinds ( dsMonoBinds )
30 import Bag ( unionBags, isEmptyBag )
31 import BasicTypes ( SYN_IE(Module) )
32 import CmdLineOpts ( opt_DoCoreLinting, opt_SccGroup, opt_SccProfilingOn )
33 import CostCentre ( IsCafCC(..), mkAutoCC )
34 import CoreLift ( liftCoreBindings )
35 import CoreLint ( lintCoreBindings )
36 import Id ( nullIdEnv, mkIdEnv, idType,
37 SYN_IE(DictVar), GenId, SYN_IE(Id) )
38 import ErrUtils ( dumpIfSet, doIfSet )
39 import Outputable ( PprStyle(..), pprDumpStyle, pprErrorsStyle, printErrs )
41 import UniqSupply ( splitUniqSupply, UniqSupply )
44 The only trick here is to get the @DsMonad@ stuff off to a good
48 deSugar :: UniqSupply -- name supply
49 -> Module -- module name
50 -> TypecheckedMonoBinds
51 -> IO [CoreBinding] -- output
53 deSugar us mod_name all_binds
55 (us1, us2) = splitUniqSupply us
57 module_and_group = (mod_name, grp_name)
58 grp_name = case opt_SccGroup of
60 Nothing -> mod_name -- default: module name
62 (core_prs, ds_warns) = initDs us1 nullIdEnv module_and_group
63 (dsMonoBinds opt_SccProfilingOn recursive all_binds [])
65 ds_binds = liftCoreBindings us2 [Rec core_prs]
68 -- Display any warnings
69 doIfSet (not (isEmptyBag ds_warns))
70 (printErrs (pprDsWarnings pprErrorsStyle ds_warns)) >>
72 -- Lint result if necessary
73 lintCoreBindings "Desugarer" False ds_binds >>
76 dumpIfSet opt_D_dump_ds "Desugared:"
77 (pprCoreBindings pprDumpStyle ds_binds) >>