Add HsSyn prettyprinter tests
[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 BasicTypes ( SpliceExplicitFlag(..))
14 import PlaceHolder ( DataId, OutputableBndrId, HasOccNameId )
15 import Data.Data hiding ( Fixity )
16
17 type role HsExpr nominal
18 type role HsCmd nominal
19 type role MatchGroup nominal representational
20 type role GRHSs nominal representational
21 type role HsSplice nominal
22 type role SyntaxExpr nominal
23 data HsExpr (i :: *)
24 data HsCmd  (i :: *)
25 data HsSplice (i :: *)
26 data MatchGroup (a :: *) (body :: *)
27 data GRHSs (a :: *) (body :: *)
28 data SyntaxExpr (i :: *)
29
30 instance (DataId id) => Data (HsSplice id)
31 instance (DataId id) => Data (HsExpr id)
32 instance (DataId id) => Data (HsCmd id)
33 instance (Data body,DataId id) => Data (MatchGroup id body)
34 instance (Data body,DataId id) => Data (GRHSs id body)
35 instance (DataId id) => Data (SyntaxExpr id)
36
37 instance (OutputableBndrId id, HasOccNameId id) => Outputable (HsExpr id)
38 instance (OutputableBndrId id, HasOccNameId id) => Outputable (HsCmd id)
39
40 type LHsExpr a = Located (HsExpr a)
41
42 pprLExpr :: (OutputableBndrId id, HasOccNameId id) => LHsExpr id -> SDoc
43
44 pprExpr :: (OutputableBndrId id,HasOccNameId id) => HsExpr id -> SDoc
45
46 pprSplice :: (OutputableBndrId id, HasOccNameId id)
47           => HsSplice id -> SDoc
48
49 pprSpliceDecl ::  (OutputableBndrId id, HasOccNameId id)
50           => HsSplice id -> SpliceExplicitFlag -> SDoc
51
52 pprPatBind :: (OutputableBndrId bndr,
53                OutputableBndrId id,
54                HasOccNameId id,
55                HasOccNameId bndr,
56                Outputable body)
57            => LPat bndr -> GRHSs id body -> SDoc
58
59 pprFunBind :: (OutputableBndrId idR, HasOccNameId idR, Outputable body)
60            => MatchGroup idR body -> SDoc