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