compiler: de-lhs hsSyn/
[ghc.git] / compiler / hsSyn / HsExpr.hs-boot
1 {-# LANGUAGE CPP, KindSignatures #-}
2 {-# LANGUAGE FlexibleContexts #-}
3 {-# LANGUAGE UndecidableInstances #-} -- Note [Pass sensitive types]
4                                       -- in module PlaceHolder
5 {-# LANGUAGE ConstraintKinds #-}
6 #if __GLASGOW_HASKELL__ > 706
7 {-# LANGUAGE RoleAnnotations #-}
8 #endif
9
10 module HsExpr where
11
12 import SrcLoc     ( Located )
13 import Outputable ( SDoc, OutputableBndr, Outputable )
14 import {-# SOURCE #-} HsPat  ( LPat )
15 import PlaceHolder ( DataId )
16 import Data.Data hiding ( Fixity )
17
18 #if __GLASGOW_HASKELL__ > 706
19 type role HsExpr nominal
20 type role HsCmd nominal
21 type role MatchGroup nominal representational
22 type role GRHSs nominal representational
23 type role HsSplice nominal
24 #endif
25 data HsExpr (i :: *)
26 data HsCmd  (i :: *)
27 data HsSplice (i :: *)
28 data MatchGroup (a :: *) (body :: *)
29 data GRHSs (a :: *) (body :: *)
30
31 #if __GLASGOW_HASKELL__ > 706
32 instance Typeable HsSplice
33 instance Typeable HsExpr
34 instance Typeable MatchGroup
35 instance Typeable GRHSs
36 #else
37 instance Typeable1 HsSplice
38 instance Typeable1 HsExpr
39 instance Typeable1 HsCmd
40 instance Typeable2 MatchGroup
41 instance Typeable2 GRHSs
42 #endif
43
44 instance (DataId id) => Data (HsSplice id)
45 instance (DataId id) => Data (HsExpr id)
46 instance (DataId id) => Data (HsCmd id)
47 instance (Data body,DataId id) => Data (MatchGroup id body)
48 instance (Data body,DataId id) => Data (GRHSs id body)
49
50 instance OutputableBndr id => Outputable (HsExpr id)
51 instance OutputableBndr id => Outputable (HsCmd id)
52
53 type LHsExpr a = Located (HsExpr a)
54 type SyntaxExpr a = HsExpr a
55
56 pprLExpr :: (OutputableBndr i) =>
57         LHsExpr i -> SDoc
58
59 pprExpr :: (OutputableBndr i) =>
60         HsExpr i -> SDoc
61
62 pprUntypedSplice :: (OutputableBndr i) =>
63                     HsSplice i -> SDoc
64
65 pprPatBind :: (OutputableBndr bndr, OutputableBndr id, Outputable body)
66            => LPat bndr -> GRHSs id body -> SDoc
67
68 pprFunBind :: (OutputableBndr idL, OutputableBndr idR, Outputable body)
69            => idL -> Bool -> MatchGroup idR body -> SDoc