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]))
|