2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
4 \section[Desugar]{@deSugar@: the main function}
7 module Desugar ( deSugar, pprDsWarnings
8 #if __GLASGOW_HASKELL__ < 200
13 #include "HsVersions.h"
15 import CmdLineOpts ( opt_D_dump_ds )
16 import HsSyn ( HsBinds, HsExpr, MonoBinds
18 import TcHsSyn ( TypecheckedMonoBinds, TypecheckedHsExpr
21 import PprCore ( pprCoreBindings )
22 import Name ( isExported )
24 import DsBinds ( dsMonoBinds )
27 import Bag ( unionBags, isEmptyBag )
28 import BasicTypes ( Module, RecFlag(..) )
29 import CmdLineOpts ( opt_DoCoreLinting, opt_SccGroup, opt_SccProfilingOn )
30 import CostCentre ( IsCafCC(..), mkAutoCC )
31 import CoreLift ( liftCoreBindings )
32 import CoreLint ( lintCoreBindings )
33 import Id ( nullIdEnv, mkIdEnv, idType,
35 import ErrUtils ( dumpIfSet, doIfSet )
37 import UniqSupply ( splitUniqSupply, UniqSupply )
40 The only trick here is to get the @DsMonad@ stuff off to a good
44 deSugar :: UniqSupply -- name supply
45 -> Module -- module name
46 -> TypecheckedMonoBinds
47 -> IO [CoreBinding] -- output
49 deSugar us mod_name all_binds
51 (us1, us2) = splitUniqSupply us
53 module_and_group = (mod_name, grp_name)
54 grp_name = case opt_SccGroup of
56 Nothing -> mod_name -- default: module name
58 (core_prs, ds_warns) = initDs us1 nullIdEnv module_and_group
59 (dsMonoBinds opt_SccProfilingOn all_binds [])
61 ds_binds = liftCoreBindings us2 [Rec core_prs]
64 -- Display any warnings
65 doIfSet (not (isEmptyBag ds_warns))
66 (printErrs (pprDsWarnings ds_warns)) >>
68 -- Lint result if necessary
69 lintCoreBindings "Desugarer" False ds_binds >>
72 dumpIfSet opt_D_dump_ds "Desugared:"
73 (pprCoreBindings ds_binds) >>