Update Hadrian
[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 {-# LANGUAGE RoleAnnotations #-}
7 {-# LANGUAGE ExistentialQuantification #-}
8
9 module HsExpr where
10
11 import SrcLoc     ( Located )
12 import Outputable ( SDoc, Outputable )
13 import {-# SOURCE #-} HsPat  ( LPat )
14 import BasicTypes ( SpliceExplicitFlag(..))
15 import HsExtension ( OutputableBndrId, DataId, SourceTextX )
16 import Data.Data hiding ( Fixity )
17
18 type role HsExpr nominal
19 type role HsCmd nominal
20 type role MatchGroup nominal representational
21 type role GRHSs nominal representational
22 type role HsSplice nominal
23 type role SyntaxExpr nominal
24 data HsExpr (i :: *)
25 data HsCmd  (i :: *)
26 data HsSplice (i :: *)
27 data MatchGroup (a :: *) (body :: *)
28 data GRHSs (a :: *) (body :: *)
29 data SyntaxExpr (i :: *)
30
31 instance (DataId p) => Data (HsSplice p)
32 instance (DataId p) => Data (HsExpr p)
33 instance (DataId p) => Data (HsCmd p)
34 instance (Data body,DataId p) => Data (MatchGroup p body)
35 instance (Data body,DataId p) => Data (GRHSs p body)
36 instance (DataId p) => Data (SyntaxExpr p)
37
38 instance (SourceTextX p, OutputableBndrId p) => Outputable (HsExpr p)
39 instance (SourceTextX p, OutputableBndrId p) => Outputable (HsCmd p)
40
41 type LHsExpr a = Located (HsExpr a)
42
43 pprLExpr :: (SourceTextX p, OutputableBndrId p) => LHsExpr p -> SDoc
44
45 pprExpr :: (SourceTextX p, OutputableBndrId p) => HsExpr p -> SDoc
46
47 pprSplice :: (SourceTextX p, OutputableBndrId p) => HsSplice p -> SDoc
48
49 pprSpliceDecl ::  (SourceTextX p, OutputableBndrId p)
50           => HsSplice p -> SpliceExplicitFlag -> SDoc
51
52 pprPatBind :: forall bndr p body. (SourceTextX p, SourceTextX bndr,
53                                    OutputableBndrId bndr,
54                                    OutputableBndrId p,
55                                    Outputable body)
56            => LPat bndr -> GRHSs p body -> SDoc
57
58 pprFunBind :: (SourceTextX idR, OutputableBndrId idR, Outputable body)
59            => MatchGroup idR body -> SDoc