Refactor visible type application.
[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, OutputableBndr, Outputable )
12 import {-# SOURCE #-} HsPat  ( LPat )
13 import PlaceHolder ( DataId )
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 Typeable HsSplice
30 instance Typeable HsExpr
31 instance Typeable MatchGroup
32 instance Typeable GRHSs
33 instance Typeable SyntaxExpr
34
35 instance (DataId id) => Data (HsSplice id)
36 instance (DataId id) => Data (HsExpr id)
37 instance (DataId id) => Data (HsCmd id)
38 instance (Data body,DataId id) => Data (MatchGroup id body)
39 instance (Data body,DataId id) => Data (GRHSs id body)
40 instance (DataId id) => Data (SyntaxExpr id)
41
42 instance OutputableBndr id => Outputable (HsExpr id)
43 instance OutputableBndr id => Outputable (HsCmd id)
44
45 type LHsExpr a = Located (HsExpr a)
46
47 pprLExpr :: (OutputableBndr i) =>
48         LHsExpr i -> SDoc
49
50 pprExpr :: (OutputableBndr i) =>
51         HsExpr i -> SDoc
52
53 pprSplice :: (OutputableBndr i) => HsSplice i -> SDoc
54
55 pprPatBind :: (OutputableBndr bndr, OutputableBndr id, Outputable body)
56            => LPat bndr -> GRHSs id body -> SDoc
57
58 pprFunBind :: (OutputableBndr idL, OutputableBndr idR, Outputable body)
59            => idL -> MatchGroup idR body -> SDoc