summaryrefslogtreecommitdiff
path: root/testsuite/tests/lib/base/T19691.hs
blob: 0525b8b4994a61cf99770b4cbd8b1b389cb93fd4 (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
{-# Language DerivingStrategies       #-}
{-# Language TypeApplications         #-}
{-# Language GADTs                    #-}
{-# Language StandaloneKindSignatures #-}
{-# Language TypeFamilies             #-}

import Data.Kind
import Type.Reflection

type Dict :: Constraint -> Type
data Dict cls where
 Dict :: cls => Dict cls

deriving stock
  instance Show (Dict cls)

type WitnessList :: forall k. k -> Type
data WitnessList as where
  WitnessList :: Typeable a => WitnessList (f a)

deriving stock
  instance Show (WitnessList as)

toDict :: TypeRep a -> Dict (Typeable a)
toDict TypeRep = Dict

witness :: TypeRep as -> Maybe (WitnessList as)
witness (App _ TypeRep) = Just WitnessList

main :: IO ()
main = do
  print (toDict  (TypeRep @[Int]))
  print (witness (TypeRep @[Int]))