Commit 321bc1a6 authored by Simon Peyton Jones's avatar Simon Peyton Jones

Improve output from -ddump-types

This patch makes a number of improvements to the output
generated by -ddump-types

* Prints data constructor separately
* Omits empty chunks of output

I was driven initially by the unhelpful existing output for
data constructors, but ended up doing some refactoring.

Lots of error message wibbles, but nothing significant.
Certainly no change in user behaviour.

(NB: It is just possible that I have failed to cleanly
     separate this patch from the next one, about
     isPredTy and friends.)
parent 41115401
......@@ -103,6 +103,7 @@ import RnEnv
import RnSource
import ErrUtils
import Id
import IdInfo( IdDetails(..) )
import VarEnv
import Module
import UniqFM
......@@ -2640,7 +2641,8 @@ loadUnqualIfaces hsc_env ictxt
{-
************************************************************************
* *
Degugging output
Debugging output
This is what happens when you do -ddump-types
* *
************************************************************************
-}
......@@ -2677,8 +2679,10 @@ pprTcGblEnv (TcGblEnv { tcg_type_env = type_env,
tcg_fam_insts = fam_insts,
tcg_rules = rules,
tcg_imports = imports })
= vcat [ ppr_types type_env
, ppr_tycons fam_insts type_env
= getPprDebug $ \debug ->
vcat [ ppr_types debug type_env
, ppr_tycons debug fam_insts type_env
, ppr_datacons debug type_env
, ppr_patsyns type_env
, ppr_insts insts
, ppr_fam_insts fam_insts
......@@ -2696,81 +2700,95 @@ ppr_rules rules
hang (text "RULES")
2 (vcat (map ppr rules))
ppr_types :: TypeEnv -> SDoc
ppr_types type_env = getPprDebug $ \dbg ->
let
ppr_types :: Bool -> TypeEnv -> SDoc
ppr_types debug type_env
= ppr_things "TYPE SIGNATURES" ppr_sig
(sortBy (comparing getOccName) ids)
where
ids = [id | id <- typeEnvIds type_env, want_sig id]
want_sig id | dbg
= True
| otherwise
= isExternalName (idName id) &&
(not (isDerivedOccName (getOccName id)))
-- Top-level user-defined things have External names.
-- Suppress internally-generated things unless -dppr-debug
in
ppr_sigs ids
ppr_tycons :: [FamInst] -> TypeEnv -> SDoc
ppr_tycons fam_insts type_env = getPprDebug $ \dbg ->
let
want_sig id
| debug = True
| otherwise = hasTopUserName id
&& case idDetails id of
VanillaId -> True
RecSelId {} -> True
ClassOpId {} -> True
FCallId {} -> True
_ -> False
-- Data cons (workers and wrappers), pattern synonyms,
-- etc are suppressed (unless -dppr-debug),
-- because they appear elsehwere
ppr_sig id = hang (ppr id <+> dcolon) 2 (ppr (tidyTopType (idType id)))
ppr_tycons :: Bool -> [FamInst] -> TypeEnv -> SDoc
ppr_tycons debug fam_insts type_env
= vcat [ ppr_things "TYPE CONSTRUCTORS" ppr_tc tycons
, ppr_things "COERCION AXIOMS" pprCoAxiom
(typeEnvCoAxioms type_env) ]
where
fi_tycons = famInstsRepTyCons fam_insts
tycons = [tycon | tycon <- typeEnvTyCons type_env, want_tycon tycon]
want_tycon tycon | dbg = True
tycons = sortBy (comparing getOccName) $
[tycon | tycon <- typeEnvTyCons type_env
, want_tycon tycon]
-- Sort by OccName to reduce unnecessary changes
want_tycon tycon | debug = True
| otherwise = not (isImplicitTyCon tycon) &&
isExternalName (tyConName tycon) &&
not (tycon `elem` fi_tycons)
in
vcat [ hang (text "TYPE CONSTRUCTORS")
2 (ppr_tydecls tycons)
, hang (text "COERCION AXIOMS")
2 (vcat (map pprCoAxiom (typeEnvCoAxioms type_env))) ]
ppr_tc tc
= vcat [ ppWhen show_roles $
hang (text "type role" <+> ppr tc)
2 (hsep (map ppr roles))
, hang (ppr tc <+> dcolon)
2 (ppr (tidyTopType (tyConKind tc))) ]
where
show_roles = debug || not (all (== boring_role) roles)
roles = tyConRoles tc
boring_role | isClassTyCon tc = Nominal
| otherwise = Representational
-- Matches the choice in IfaceSyn, calls to pprRoles
ppr_datacons :: Bool -> TypeEnv -> SDoc
ppr_datacons debug type_env
= ppr_things "DATA CONSTRUCTORS" ppr_dc wanted_dcs
-- The filter gets rid of class data constructors
where
ppr_dc dc = ppr dc <+> dcolon <+> ppr (dataConUserType dc)
all_dcs = typeEnvDataCons type_env
wanted_dcs | debug = all_dcs
| otherwise = filterOut is_cls_dc all_dcs
is_cls_dc dc = isClassTyCon (dataConTyCon dc)
ppr_patsyns :: TypeEnv -> SDoc
ppr_patsyns type_env
= ppUnless (null patsyns) $
hang (text "PATTERN SYNONYMS")
2 (vcat (map ppr_ps patsyns))
= ppr_things "PATTERN SYNONYMS" ppr_ps
(typeEnvPatSyns type_env)
where
patsyns = typeEnvPatSyns type_env
ppr_ps ps = ppr ps <+> dcolon <+> pprPatSynType ps
ppr_insts :: [ClsInst] -> SDoc
ppr_insts ispecs
= ppUnless (null ispecs) $
hang (text "INSTANCES") 2 (pprInstances ispecs)
= ppr_things "CLASS INSTANCES" pprInstance ispecs
ppr_fam_insts :: [FamInst] -> SDoc
ppr_fam_insts fam_insts
= ppUnless (null fam_insts) $
hang (text "FAMILY INSTANCES")
2 (pprFamInsts fam_insts)
ppr_sigs :: [Var] -> SDoc
ppr_sigs ids -- Print type signatures; sort by OccName
= hang (text "TYPE SIGNATURES")
2 (vcat (map ppr_sig (sortBy (comparing getOccName) ids)))
= ppr_things "FAMILY INSTANCES" pprFamInst fam_insts
ppr_things :: String -> (a -> SDoc) -> [a] -> SDoc
ppr_things herald ppr_one things
| null things = empty
| otherwise = text herald $$ nest 2 (vcat (map ppr_one things))
hasTopUserName :: NamedThing x => x -> Bool
-- A top-level thing whose name is not "derived"
-- Thus excluding things like $tcX, from Typeable boilerplate
-- and C:Coll from class-dictionary data constructors
hasTopUserName x
= isExternalName name && not (isDerivedOccName (nameOccName name))
where
ppr_sig id = hang (ppr id <+> dcolon) 2 (ppr (tidyTopType (idType id)))
ppr_tydecls :: [TyCon] -> SDoc
ppr_tydecls tycons
-- Print type constructor info for debug purposes
-- Sort by OccName to reduce unnecessary changes
= getPprDebug $ \ debug ->
vcat $ map (ppr_tc debug) $ sortBy (comparing getOccName) tycons
where
ppr_tc debug tc
= vcat [ ppWhen show_roles $
hang (text "type role" <+> ppr tc)
2 (hsep (map ppr roles))
, hang (ppr tc <+> dcolon)
2 (ppr (tidyTopType (tyConKind tc))) ]
where
roles = tyConRoles tc
show_roles = debug || not (all (== boring_role) roles)
boring_role | isClassTyCon tc = Nominal
| otherwise = Representational
-- Matches the choice in IfaceSyn, calls to pprRoles
name = getName x
{-
********************************************************************************
......
......@@ -41,8 +41,6 @@ TYPE SIGNATURES
forall (m :: * -> *) a p.
(Monad m, Num (m a)) =>
(m a -> m (m a)) -> p -> m a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -4,8 +4,6 @@ TYPE SIGNATURES
forall (f :: * -> *) t b.
(Applicative f, Num t, Num b) =>
(t -> f b) -> f b
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -15,8 +13,6 @@ TYPE SIGNATURES
forall (f :: * -> *) t b.
(Applicative f, Num t, Num b) =>
(t -> f b) -> f b
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
{"span": null,"doc": "TYPE SIGNATURES foo :: forall a. a -> a\nTYPE CONSTRUCTORS\nCOERCION AXIOMS\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.3,\n integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}
{"span": null,"doc": "TYPE SIGNATURES\n foo :: forall a. a -> a\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.3,\n integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}
TYPE SIGNATURES
Foo.L :: forall a. [a] -> ListColl a
empty :: forall c. Coll c => c
emptyL :: forall a. ListColl a
insert :: forall c. Coll c => Elem c -> c -> c
......@@ -11,7 +10,9 @@ TYPE CONSTRUCTORS
COERCION AXIOMS
axiom Foo.D:R:ElemListColl ::
Elem (ListColl a) = a -- Defined at T3017.hs:13:9
INSTANCES
DATA CONSTRUCTORS
L :: forall a. [a] -> ListColl a
CLASS INSTANCES
instance Coll (ListColl a) -- Defined at T3017.hs:12:11
FAMILY INSTANCES
type Elem (ListColl a)
......
TYPE SIGNATURES
ADT.Foo :: forall x y z. x -> y -> z -> Foo x y z
bar :: Int -> Foo Bool () Int
TYPE CONSTRUCTORS
Foo :: * -> * -> * -> *
COERCION AXIOMS
DATA CONSTRUCTORS
Foo :: forall x y z. x -> y -> z -> Foo x y z
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr1 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr2 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr3 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr4 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr5 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
addAndOr6 :: (Int, Bool) -> (Bool, Int) -> (Int, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
DataFamilyInstanceLHS.A :: MyKind
DataFamilyInstanceLHS.B :: MyKind
DataFamilyInstanceLHS.SingA ::
forall (_ :: MyKind).
(_ ~ 'A) =>
DataFamilyInstanceLHS.R:SingMyKind_ _
DataFamilyInstanceLHS.SingB ::
forall (_ :: MyKind).
(_ ~ 'B) =>
DataFamilyInstanceLHS.R:SingMyKind_ _
foo :: Sing 'A
TYPE CONSTRUCTORS
MyKind :: *
......@@ -18,6 +8,11 @@ COERCION AXIOMS
axiom DataFamilyInstanceLHS.D:R:SingMyKind_0 ::
Sing _ = DataFamilyInstanceLHS.R:SingMyKind_
-- Defined at DataFamilyInstanceLHS.hs:8:15
DATA CONSTRUCTORS
A :: MyKind
B :: MyKind
SingA :: Sing 'A
SingB :: Sing 'B
FAMILY INSTANCES
data instance Sing
Dependent modules: []
......
TYPE SIGNATURES
alpha :: Integer
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bravo :: forall w. Num w => w
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bravo :: forall w. Num w => w
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
barry :: forall w. w -> (Either [Char] w, Either [Char] w)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: forall a. (a ~ Bool) => (a, Bool)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
every :: forall t. (t -> Bool) -> [t] -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
every :: forall w. (w -> Bool) -> [w] -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -4,8 +4,6 @@ TYPE SIGNATURES
arbitCs3 :: forall a. (Show a, Enum a, Eq a) => a -> String
arbitCs4 :: forall a. (Eq a, Show a, Enum a) => a -> String
arbitCs5 :: forall a. (Eq a, Enum a, Show a) => a -> String
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: String
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -227,8 +227,6 @@ TYPE SIGNATURES
zipWith3 ::
forall a b c d. (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
|| :: Bool -> Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: forall a. Num a => a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: forall a. Num a => a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
fall :: forall a. a -> a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: (forall a. [a] -> [a]) -> ([Bool], [Char])
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: (forall a. [a] -> [a]) -> ([Bool], [Char])
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
monoLoc :: forall a. a -> ((a, String), (a, String))
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -6,8 +6,7 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
type role NukeMonad phantom phantom phantom
NukeMonad :: * -> * -> * -> *
COERCION AXIOMS
INSTANCES
CLASS INSTANCES
instance Functor (NukeMonad a b) -- Defined at Meltdown.hs:8:10
instance Applicative (NukeMonad a b)
-- Defined at Meltdown.hs:11:10
......
TYPE SIGNATURES
monoLoc :: forall a. a -> ((a, String), (a, String))
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: forall b a. (a, b) -> (a, b)
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
NamedWildcardInDataFamilyInstanceLHS.A :: MyKind
NamedWildcardInDataFamilyInstanceLHS.B :: MyKind
NamedWildcardInDataFamilyInstanceLHS.SingA ::
forall (_a :: MyKind).
(_a ~ 'A) =>
NamedWildcardInDataFamilyInstanceLHS.R:SingMyKind_a _a
NamedWildcardInDataFamilyInstanceLHS.SingB ::
forall (_a :: MyKind).
(_a ~ 'B) =>
NamedWildcardInDataFamilyInstanceLHS.R:SingMyKind_a _a
TYPE CONSTRUCTORS
MyKind :: *
type role Sing nominal nominal
......@@ -17,6 +6,11 @@ COERCION AXIOMS
axiom NamedWildcardInDataFamilyInstanceLHS.D:R:SingMyKind_a0 ::
Sing _a = NamedWildcardInDataFamilyInstanceLHS.R:SingMyKind_a
-- Defined at NamedWildcardInDataFamilyInstanceLHS.hs:8:15
DATA CONSTRUCTORS
A :: MyKind
B :: MyKind
SingA :: Sing 'A
SingB :: Sing 'B
FAMILY INSTANCES
data instance Sing
Dependent modules: []
......
TYPE SIGNATURES
f :: forall a. Eq a => a -> a -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: forall a. a -> a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......@@ -2,8 +2,6 @@ TYPE SIGNATURES
f :: Bool
g :: Bool
orr :: forall a. a -> a -> a
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
test3 :: Bool -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
foo :: Bool -> Char
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
showTwo :: forall a. Show a => a -> String
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: forall w. w -> Bool
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
SkipMany.GenParser ::
forall tok st a. tok -> st -> a -> GenParser tok st a
skipMany ::
forall tok st a. GenParser tok st a -> GenParser tok st ()
skipMany' ::
forall tok st a. GenParser tok st a -> GenParser tok st ()
TYPE CONSTRUCTORS
GenParser :: * -> * -> * -> *
COERCION AXIOMS
DATA CONSTRUCTORS
GenParser :: forall tok st a. tok -> st -> a -> GenParser tok st a
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
somethingShowable :: Show Bool => Bool -> String
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......
TYPE SIGNATURES
unc :: forall w1 w2 w3. (w1 -> w2 -> w3) -> (w1, w2) -> w3
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
unc :: forall a b w. (a -> b -> w) -> (a, b) -> w
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
bar :: forall t w. t -> (t -> w) -> w
foo :: forall a. (Show a, Enum a) => a -> String
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
......
TYPE SIGNATURES
T15592.MkT ::
forall {k} k1 (f :: k1 -> k -> *) (a :: k1) (b :: k).
f a b -> T f a b -> T f a b
TYPE CONSTRUCTORS
type role T nominal nominal representational nominal nominal
T :: forall {k} k1. (k1 -> k -> *) -> k1 -> k -> *
COERCION AXIOMS
DATA CONSTRUCTORS
MkT :: forall {k} k1 (f :: k1 -> k -> *) (a :: k1) (b :: k).
f a b -> T f a b -> T f a b
Dependent modules: []
Dependent packages: [base-4.12.0.0, ghc-prim-0.5.3,
integer-gmp-1.0.2.0]
TYPE SIGNATURES
Roles1.K1 :: forall a. a -> T1 a
Roles1.K2 :: forall a. a -> T2 a
Roles1.K3 :: forall k (a :: k). T3 a
Roles1.K4 :: forall (a :: * -> *) b. a b -> T4 a b
Roles1.K5 :: forall a. a -> T5 a
Roles1.K6 :: forall {k} (a :: k). T6 a
Roles1.K7 :: forall {k} (a :: k) b. b -> T7 a b
TYPE CONSTRUCTORS
type role T1 nominal
T1 :: * -> *
......@@ -19,7 +11,14 @@ TYPE CONSTRUCTORS
T6 :: forall {k}. k -> *
type role T7 nominal phantom representational