blob: 9e244638c06d92334ca36d62b01d90b9c6bcc88e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -O #-} -- -O casused a Lint error in the simplifier, so I'm putting that in
-- all the time, so we don't miss it in a fast validate
module T7891 where
import Data.Kind (Type)
newtype T = T (forall t. t -> t)
tf :: T
tf = T id
-- Can't write this type signature:
f :: t -> t
T f = tf
-- But with an indirection we can:
g :: t -> t
g = f
-- We can still use f as it were fully polymorphic (which is good):
a :: ()
a = f ()
b :: Char
b = f 'b'
-------------
class C t where
data F t :: Type
mkF :: t -> F t
instance C () where
data F () = FUnit (forall t. t -> t)
mkF () = FUnit id
-- Can't write a type for f here either:
k :: t -> t
FUnit k = mkF ()
|