on 83ff5c8 help sign in
36 lines 828 B history raw
1{-# LANGUAGE AllowAmbiguousTypes #-}
3module Data.Schematic.Utils where
5import Data.Proxy
6import Data.Singletons
7import Data.Singletons.Prelude
8import Data.Singletons.TypeLits
9import Data.Vinyl hiding (Dict)
12class Known a where
13 known :: a
15instance Known (Proxy a) where
16 known = Proxy
18instance KnownNat n => Known (Sing n) where
19 known = SNat
21instance KnownSymbol s => Known (Sing s) where
22 known = SSym
24instance (Known (Sing a), Known (Sing b)) => Known (Sing '(a,b)) where
25 known = STuple2 known known
27instance Known (Sing '[]) where known = SNil
29instance (Known (Sing a), Known (Sing as)) => Known (Sing (a ': as)) where
30 known = SCons known known
32instance Known (Rec Sing '[]) where
33 known = RNil
35instance (Known (Sing a), Known (Rec Sing tl)) => Known (Rec Sing (a ': tl)) where
36 known = known :& known